编译和部署 CLR 程序集

来源:互联网 发布:python generator 协程 编辑:程序博客网 时间:2024/05/06 08:28
编译和部署 CLR 程序集

 

本主题概要介绍了使用与 Microsoft .NET Framework 公共语言运行库 (CLR) 的 Microsoft SQL Server 集成编译数据库对象所需的命名空间和库。本主题还说明如何编写、编译和运行使用 Microsoft Visual C# 编写的简单 CLR 存储过程。

所需的命名空间

在安装 SQL Server 2005 时也一起安装了开发基本 CLR 数据库对象所需的组件。CLR 集成功能在名为 system.data.dll 的程序集中公开,该程序集是 .NET Framework 的一部分。在全局程序集缓存 (GAC) 以及 .NET Framework 目录中都可以找到此程序集。对此程序集的引用通常由命令行工具和 Microsoft Visual Studio 自动添加,因此无需手动添加它。

system.data.dll 程序集包含以下命名空间,这些命名空间是编译 CLR 数据库对象所必需的:

System.Data

System.Data.Sql

Microsoft.SqlServer.Server

System.Data.SqlTypes

编写一个简单的“Hello World”存储过程

将以下 Visual C# 代码复制并粘贴到一个文本编辑器中,然后在名为“helloworld.cs”或“helloworld.vb”的文件中保存它。

C#
复制代码
using System;using System.Data;using Microsoft.SqlServer.Server;using System.Data.SqlTypes;public class HelloWorldProc{    [Microsoft.SqlServer.Server.SqlProcedure]    public static void HelloWorld()    {        SqlContext.Pipe.Send("Hello world!/n");    }}
Visual Basic
复制代码
Imports SystemImports System.DataImports Microsoft.SqlServer.ServerImports System.Data.SqlTypes Public Class HelloWorldProc    <Microsoft.SqlServer.Server.SqlProcedure> _     Public Shared  Sub HelloWorld()        SqlContext.Pipe.Send("Hello world!/n")    End SubEnd Class

这个简单的程序包含针对一个公共类的单个静态方法。此方法使用两个新类:SqlContext 和 SqlPipe,它们用于创建托管数据库对象以输出一个简单的文本消息。此方法可以声明为 SQL Server 中的存储过程,然后采用与 Transact-SQL 存储过程相同的方式运行。

我们现在将此程序编译为一个库,将它加载到 SQL Server 中,并且将它作为存储过程运行。

编译该“Hello World”存储过程

在默认情况下 SQL Server 安装 .NET Framework 重新分发文件。这些文件包括 csc.exe 和 vbc.exe,它们是分别用于 Visual C# 和 Visual Basic 程序的命令行编译器。为了编译我们的示例,请修改您的路径变量以指向包含 csc.exe 或 vbc.exe 的目录。下面是 .NET Framework 的默认安装路径。

复制代码
C:/Windows/Microsoft.NET/Framework/(version)

Version 目录包含已安装的 .NET Framework 可重新发布文件的版本号。例如:

复制代码
C:/Windows/Microsoft.NET/Framework/v2.0.31113

一旦将 .NET Framework 目录添加到您的路径后,就可以使用以下命令将该存储过程示例编译到某一程序集中。

对于 Visual C# 源文件:

复制代码
csc /target:library helloworld.cs 

对于 Visual Basic 源文件:

复制代码
vbc /target:library helloworld.vb

/target 选项允许您将它编译到某一程序集中。

这些命令使用 /target 选项启动 Visual C# 或 Visual Basic 编译器,以指定生成一个库 DLL。

在 SQL Server 中加载和运行“Hello World”存储过程

一旦该存储过程示例已成功编译后,您就可以在 SQL Server 中测试它了。为此,打开 SQL Server Management Studio 并创建一个新查询,连接到适当的测试数据库(例如,AdventureWorks 示例数据库)。

我们将需要创建该程序集,以便我们可以访问该存储过程。对于此示例,我们将假定您已在 C:/ 目录中创建了 helloworld.dll 程序集。将以下 Transact-SQL 语句添加到您的查询中。

复制代码
CREATE ASSEMBLY helloworld from 'c:/helloworld.dll' WITH PERMISSION_SET = SAFE

在创建了该程序集之后,现在可以通过使用 create procedure 语句访问我们的 HelloWorld 方法。我们将该存储过程称作“hello”:

复制代码
CREATE PROCEDURE hello  AS  EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld

一旦创建了该存储过程后,它就可以像在 Transact-SQL 中编写的普通存储过程一样运行它了。请执行以下命令:

复制代码
EXEC hello

这应在 SQL Server Management Studio 消息窗口中产生以下输出。

复制代码
Hello world!

删除该“Hello World”存储过程示例

在您完成该存储过程示例的运行后,可以从测试数据库中该删除存储过程和程序集。

首先,使用 drop procedure 命令删除该存储过程。

复制代码
drop procedure hello

删除了该存储过程后,可以删除包含您的示例代码的程序集。

复制代码
drop assembly helloworld
 
原创粉丝点击