您现在的位置是:首页 > 编程 > 

MSSQL之二十二 CLR及SQL

2025-07-29 10:52:28
MSSQL之二十二 CLR及SQL ​在SQL Server中使用CLR调用.ET方法​介绍 我们一起来做个示例,在.ET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法。按照微软所述,通过宿主 Microsoft .ET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型。 这使得开发人员可以用任

MSSQL之二十二 CLR及SQL

在SQL Server中使用CLR调用.ET方法

介绍

我们一起来做个示例,在.ET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法。按照微软所述,通过宿主 Microsoft .ET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型。 这使得开发人员可以用任何CLR语言(如C#、VB.ET或C++等)来写存储过程、触发器和用户自定义函数。

我们如何实现这些功能呢?

为了使用CLR,我们需要做如下几步:

1、在.ET中新建一个类,并在这个类里新建一个public方法。

2、编译这个类为一个DLL。

、在SQL Server中注册这个DLL。

4、新建一个SQL Server函数来访问指定的.ET方法。

接下来,我们一起来完成一个示例

首先,在Visual Studio中新建一个名为“SQLServerCLRTest”的类库项目。 然后,新建一个名为“CLRFuncti”的类,并在其内添加一个名为“HelloWold”的方法,代码如下:

public class CLRFuncti

{

public static string HelloWorld(string ame)

{

return ("Hello " + ame);

}

}

这是一个非常简单的方法(为了让SQL Server可以调用它,它必须要是public和static的),这个方法有一个string类型的参数,返回信息为“Hello”加上你传入的参数。

现在,我们需要编译这个项目为一个DLL,并在SQL Server中注册它。 这也是比较简单的,在VS中右键单击项目,选择“生成”后程序就会生成一个DLL。 如果你的项目是调试模式的话,那么就可以在如下所示那样的路径里到编译好的DLL。

C:\Documents and Settings\mark.smith\My Documents\Visual Studio 2005\Projects\SQLServerCLRTest\SQLServerCLRTest\bin\Debug\SQLServerCLRTest.dll

到这个DLL后,我们就可以把它拷贝到我们的SQL Server机器上了,如果是相同机器的话我们只要记住这个路径即可。

启用CLR功能

默认情况下,SQL Server中的CLR是关闭的,所以我们需要执行如下命令打开CLR:

exec sp_configure 'clr enabled',​1

reconfigure

go

注册DLL

为了调用我们写的那个方法,需要在SQL Server中注册我们刚刚编译好的那个DLL。 我们可以在数据库中使用如下命令来注册DLL(路径为你的DLL文件的路径)

CREATE ASSEMBLY asmHelloWorld FROM 'C:\SQLServerCLRTest.dll'

在SQL Server中调用我们的.ET方法

为了调用.ET方法,我们可以写一个SQL Server自定义函数,并在其内使用“EXTERAL AME”来通知SQL Server使用CLR功能。 代码如下:

CREATE FUCTIO

(

@name as ​nvarchar​(​200​)

)

RETURS ​nvarchar​(​200​)

AS EXTERAL AME asmHelloWorld.[SQLServerCLRTest.CLRFuncti].HelloWorld

上面的自定义函数做了两项工作。 首先是声明了一个nvarchar参数,它等同于.ET里的string类型(如果将其设置为varchar并且后面使用了“EXTERAL AME”的话就会报错)。然后使用“EXTERAL AME”来调用.ET方法。 语法如下:

程序集名.类名.方法名

但是,当我使用这个语法调用.ET方法的时候,SQL Server就会报错,所以为了让它正常工作,我使用了如下语法:

程序集名.[类名].方法名

现在我们就可以通过如下语句调用.ET方法了:

SELECT ('Mark')

当你运行这段代码的时候,就会得到一个返回结果“Hello Mark”。

代码语言:javascript代码运行次数:0运行复制
--实现在sql server 2005中调用C#程序集
Create database Ku
go
use ATM
go
--1.在sql 2005创建程序集
Create Assembly MyAssembly
from 'd:\clr\EmployeePay.dll'
--创建程序集的语法格式:
Create Assembly 程序集名
from '要引用的C#的程序集的路径及文件名'
with Permission_set=Safe|External_Access|UnSafe
safe:最安全.不能访问任何外部资源.
External_Access:能访问一些外部资源,例如网络\环境变量\注册表
Unsafe:任何资源.
--2.使sql server 2005支持CLR,这一步可以放到最前面.
--在SQL2005中激活 CLR 使SQL Server支持 运行 受管理代码
 exec sp_configure 'clr enabled',1  --sp_为系统存储过程,相当于命令一样.
 reconfigure   
 go 
--.创建存储过程,来使用程序集里面的业务逻辑代码.如何和dll/exe里面的类或方法建立联系
create proc clrproc 
as 
external name ConvertXMLAssembly.[CLRStoredProcedure.XMLProc].convXml
--external name clr程序集名.[命名空间名.类名].方法名
--4.执行/测试 相关的存储过程
exec clrProc
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-0-16,如有侵权请联系 cloudcommunity@tencent 删除clr程序函数语法sql

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1253644.html

相关标签:无
上传时间: 2025-07-27 23:36:15
留言与评论(共有 14 条评论)
本站网友 依那普利价格
2分钟前 发表
返回信息为“Hello”加上你传入的参数
本站网友 44414
16分钟前 发表
VB.ET或C++等)来写存储过程
本站网友 麦冬泡水喝的五大禁忌
14分钟前 发表
4
本站网友 大宝眼袋霜价格
19分钟前 发表
SQL Server中的CLR是关闭的
本站网友 京都商城
10分钟前 发表
选择“生成”后程序就会生成一个DLL
本站网友 服务质量评价
27分钟前 发表
当我使用这个语法调用.ET方法的时候
本站网友 工商银行信用卡登陆
26分钟前 发表
在VS中右键单击项目
本站网友 华宁二手房
6分钟前 发表
我们可以写一个SQL Server自定义函数
本站网友 百度负面消息
9分钟前 发表
\SQLServerCLRTest.dll' 在SQL Server中调用我们的.ET方法 为了调用.ET方法
本站网友 广东电影院
23分钟前 发表
需要在SQL Server中注册我们刚刚编译好的那个DLL
本站网友 王津津
22分钟前 发表
它必须要是public和static的)
本站网友 呼吸系统用药
4分钟前 发表
并在这个类里新建一个方法
本站网友 伦敦现在几点
8分钟前 发表
语法如下:程序集名.类名.方法名 但是