深入解析.Net CLR函数使用举例
创始人
2024-06-07 12:01:25
0

本文介绍.Net CLR,其中讲解了在SQL Server 中创建.Net CLR函数的几个步骤,还有具体的实例等等。

可以在SQL Server 实例中创建可在 Microsoft .NET Framework 公共语言运行时 (CLR) 中创建的程序集中进行编程的数据库对象。可以充分利用公共语言运行时所提供的丰富的编程模式的数据库对象包括聚合函数、函数、存储过程、触发器以及类型。

在SQL Server 中创建.Net CLR函数分为下列几个步骤:

使用 .NET Framework 支持的语言将函数定义为类的静态方法。然后,使用适当的语言编译器编译该类,在 .NET Framework 中生成程序集。使用 CREATE ASSEMBLY 语句在 SQL Server 中注册程序集。通过使用 CREATE FUNCTION 语句创建引用注册程序集的函数。

注意:

在Microsoft Visual Studio 中部署 SQL Server 项目将在为该项目指定的数据库中注册程序集。部署项目时,还会在数据库中为使用 SqlFunction 属性注释的所有方法创建.Net CLR函数。

注意:

默认情况下,关闭 SQL Server 执行.Net CLR代码的功能。您可以创建、更改和删除引用托管代码模块的数据库对象,但是除非通过使用 sp_configure (Transact-SQL) 启用了 clr enabled 选项,否则这些引用将不会在 SQL Server 中执行。

访问外部资源

可以使用.Net CLR函数访问外部资源,例如文件、网络资源、Web 服务及其他数据库(包括 SQL Server 远程实例)。这可以通过使用 .NET Framework 中的各种类(例如 System.IO、System.WebServices 及 System.Sql 等)来实现。

至少应将包含此类函数的程序集配置为设置了 EXTERNAL_ACCESS 权限,才能实现此目的。可以使用 SQL 客户端托管访问接口访问 SQL Server 远程实例。但在.Net CLR函数中不支持与发起服务器的环回连接。

示例如下:

.Net CLR第一步:

.Net CLR第一步
.Net CLR第一步

.Net CLR第二步:

  1. public class Class1  
  2. {  
  3. public static string MySplit(int filedIndex, string filedName)  
  4. {  
  5. //filedIndex从1开始  
  6. try  
  7. {  
  8. if (filedIndex == null || filedIndex <= 0 || filedName == null || 
  9. filedName == "")  
  10. {  
  11. return "";  
  12. }  
  13. else  
  14. {  
  15. return filedName.Split('|')[filedIndex - 1].Trim();  
  16. }  
  17.         }  
  18. catch  
  19. {  
  20. return "";  
  21. }  
  22. }  
  23. }  
  24. //得到程序集 ClassLibrary1.dll 

.Net CLR第三步:

  1. CREATE ASSEMBLY Class1AUTHORIZATION [dbo]FROM 
  2. 'C:\ClassLibrary1.dll'WITH PERMISSION_SET = SAFE  

.Net CLR第四步:

  1. CREATE FUNCTION dbo.MySplit(@filedIndex AS INT,@filedName AS
  2.  NVARCHAR(255))RETURNS NVARCHAR(255)ASEXTERNAL NAME Class1.Class1.MySplit  

.Net CLR第五步(测试):

  1. select dbo.MySplit(2,name) from mytesttable 

.Net CLR测试通过!

【编辑推荐】

  1. 浅析C#数组操作方法
  2. C#数组操作全面分析
  3. C#数组和串操作经验总结
  4. 为你解疑:CLR是什么?
  5. 分析与对比CLR Via C#静态构造函数的性能

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...