2. 受管程序集的概念
在SQL Server 2005之前,程序集也称为受管代码,它是一组编译为.dll或者.exe的文件。在.NET Framework中仍然存在这个术语和特性。然而,在SQL Server 2005中,程序集术语则变得有点模糊。
在SQL Server范围内,程序集是一个引用物理程序集.dll文件的对象。受管代码是.dll文件,该文件使用.NET Framework CLR和可访问其他受管代码来创建。更确切的说,是在SQL Server内部的其他受管代码。每段受管代码都包括两个重要的片段信息。一个是描述程序集的元数据,例如程序集方法和属性,程序集版本号。第二个片段信息是实际的受管代码,组成程序集的方法和属性。通常,使用一些高级编程语言(例如C#或者Visual Basic.NET)编写受管代码,这些代码共享类库,同时被编译为中间语言(Intermediate Language,缩写为IL)。
程序集中的受管代码实现SQL Server对象的功能,例如存储过程、UDT、CLR函数和CLR触发器。更为重要的是,程序集自身控制受管代码访问内部和外部资源的权限级别。当在SQL Server中利用CREATE ASSEMBLY语句创建程序集时,.dll文件会物理的加载到SQL Server中,这样SQL Server引擎就能够引用和使用程序集。SQL Server 2005中有两个说明所创建程序集的表,它们是sys.assemblies和sys.assembly_files。
3. 启用CLR集成的方法
当开发人员开始在SQL Server 2005中使用程序集之前,需要告知SQL Server已经准备好在SQL Server中与CLR交互。默认情况下,禁用CLR集成功能,必须启用CLR集成才能SQL Server中访问.NET对象。
为了启用CLR集成,在SQL Server Management Studio的查询窗口中执行以下代码:
EXEC sp_configure 'clr enabled', 1要启用CLR集成,必须具有ALTER SETTINGS服务器权限。该权限由sysadmin和serveradmin固定服务器角色的成员显式持有。
GO RECONFIGURE
GO
启用CLR集成的另一种方法是利用SQL Server外围应用配置器工具。为打开这个工具,可在Microsoft SQL Server 2005配置工具菜单中选择“SQL Server外围应用配置器”。要配置CLR集成,可单击对话框底部的“功能的外部应用配置器”。在弹出的对话框中,选择左边Database Engine之下的CLR集成,然后选中右边的CLR集成复选框。单击确定按钮,从而启用该选项,同时关闭窗口。接下来就可以使用受管代码创建SQL Server中的对象了,例如创建存储过程。
4. 使用受管代码创建存储过程
第一个示例很简单,其用于帮助读者初步理解在程序集中使用SQL Server 2005的方法。首先,在C:\Projects目录下创建名为sample1的文件夹。打开编辑器,输入以下代码,接着将其保存为HelloWorldStoredProcedures.cs:
using System;在HellpWorld()方法中,通过调用SqlContext类的Pipe属性能够获取指向SqlPipe对象的引用。当获取指向SqlPipe对象的引用后,接着可将表格式结果和消息发送到客户端。这个工作可由SqlPipe类的Send()方法完成。SqlPipe对象类似于ASP.NET中的Response对象。通过调用Send()的多种重载方法,开发人员可通过管道将数据发送给调用方应用程序。Send()的各种重载方法如下所示:
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldStoredProcedures
{
public static void HelloWorld()
{
SqlContext.Pipe.Send("Hello World");
}
}
Send(SqlDataReader):允许以SqlDataReader对象格式发送表格式结果。
Send(SqlDataRecord):允许以SqlDataRecord对象格式发送结果。
Send(String):使用该方法可将消息发送给调用方应用程序。
一旦创建了类,下一步是创建受管代码。为此,通过开始→所有程序→Microsoft .NET Framework SDK v2.0→SDK命令提示符,可打开命令提示符窗口。
在命令提示符窗口下,访问C:\Projects\sample1目录,接着执行以下命令:
CSC /target:library C:\Projects\sample1\HelloWorldStoredProcedures.cs此时,在sample1目录会看到一个新文件HelloWorldStoredProcedures.dll。
下一步是在SQL Server中注册程序集。在SQL Server Management Studio中打开查询窗口,确认选中AdventureWorks数据库,接着执行以下T-SQL语句:
CREATE ASSEMBLY HelloWorld
FROM 'C:\Projects\sample1\HelloWorldStoredProcedures.dll'
WITH PERMISSION_SET = SAFE