在SQL Server中使用CLR调用.NET方法实现思路_实用技巧

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

我们如何实现这些功能呢
为了使用CLR,我们需要做如下几步:
1、在.NET中新建一个类,并在这个类里新建一个public方法。
2、编译这个类为一个DLL。
3、在SQL Server中注册这个DLL。
4、新建一个SQL Server函数来访问指定的.NET方法。

接下来,我们一起来完成一个示例
首先,在Visual Studio中新建一个名为“SQLServerCLRTest”的类库项目。 然后,新建一个名为“CLRFunctions”的类,并在其内添加一个名为“HelloWold”的方法,代码如下:

复制代码 代码如下:

public class CLRFunctions
{
public static string HelloWorld(string Name)
{
return ("Hello " + Name);
}
}

这是一个非常简单的方法(为了让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中调用我们的.NET方法
为了调用.NET方法,我们可以写一个SQL Server自定义函数,并在其内使用“EXTERNAL NAME”来通知SQL Server使用CLR功能。 代码如下:

复制代码 代码如下:

CREATE FUNCTION dbo.clrHelloWorld
(
@name as nvarchar(200)
)
RETURNS nvarchar(200)
AS EXTERNAL NAME asmHelloWorld.[SQLServerCLRTest.CLRFunctions].HelloWorld

上面的自定义函数做了两项工作。 首先是声明了一个nvarchar参数,它等同于.NET里的string类型(如果将其设置为varchar并且后面使用了“EXTERNAL NAME”的话就会报错)。然后使用“EXTERNAL NAME”来调用.NET方法。 语法如下:
程序集名.类名.方法名
但是,当我使用这个语法调用.NET方法的时候,SQL Server就会报错,所以为了让它正常工作,我使用了如下语法:
程序集名.[类名].方法名
现在我们就可以通过如下语句调用.NET方法了:

复制代码 代码如下:

SELECT dbo.clrHelloWorld('Mark')

当你运行这段代码的时候,就会得到一个返回结果“Hello Mark”。
我们通过一个很简单的示例演示了如何实现SQL Server的CLR,它可以给我们带来很多非常有用的帮助。

时间: 2024-11-25 12:46:56

在SQL Server中使用CLR调用.NET方法实现思路_实用技巧的相关文章

ASP.NET中水晶报表的使用方法详解_实用技巧

前一段时间,由于在项目中要用到报表做统计,所以我学习了一下ASP.NET水晶报表的使用.水晶报表的执行模式(也就是取数据的方法)可以分为两种: 第一种是Pull模式:被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据. 另外一种就是Push模式:此时开发者不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表.在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化. 水晶报表中的报表类型也分为两种: --StrongTyped 报表: 当你将报表文

asp.net模板引擎Razor调用外部方法用法实例_实用技巧

本文实例讲述了asp.net模板引擎Razor调用外部方法用法.分享给大家供大家参考.具体如下: 首先使用Razor的步骤:读取cshtml.解析cshtml同时指定cacheName. 而这个步骤是重复的,为了遵循DRY原则,将这段代码封装为一个RazorHelper()方法 public class RazorHelper { public static string ParseRazor(HttpContext context, string csHtmlVirtualPath, obje

在SQL Server中使用命令调用SSIS包

  在SQL Server中可以使用dtexec命令运行SSIS包(2005以上版本),当然也可以通过系统过程:xp_cmdshell调用dtexec运行SSIS包. 具体操作步骤如下: 1.首先,当然是要在Business Intelligence中设计好包,并调试通过. 2.然后,有两种方式可以在SQL Server中使用命令运行SSIS包 第一种是直接执行ssis包文件,命令如: exec xp_cmdshell 'dtexec /f "c:test.dtsx"' 第二种是将包文

在SQL Server中使用命令调用SSIS包的具体方法_MsSql

具体操作步骤如下: 1.首先,当然是要在Business Intelligence中设计好包,并调试通过. 2.然后,有两种方式可以在SQL Server中使用命令运行SSIS包 第一种是直接执行ssis包文件,命令如: exec xp_cmdshell 'dtexec /f "c:\test.dtsx"' 第二种是将包文件发布或者导入到Integration Services服务中,然后再执行. 发布包是在Business Intelligence中生成发布文件,并发布到Integr

在SQL Server中使用命令调用SSIS包的具体方法

具体操作步骤如下: 1.首先,当然是要在Business Intelligence中设计好包,并调试通过. 2.然后,有两种方式可以在SQL Server中使用命令运行SSIS包 第一种是直接执行ssis包文件,命令如: exec xp_cmdshell 'dtexec /f "c:\test.dtsx"' 第二种是将包文件发布或者导入到Integration Services服务中,然后再执行. 发布包是在Business Intelligence中生成发布文件,并发布到Integr

SQL Server中合并用户日志表的方法

server 在维护SQL Server数据库的过程中,大家是不是经常会遇到成千上万的类似log20050901 这种日志表,每一个表中数据都不是很多,一个一个打开看非常不方便,或者有时候我们需要把这些表中的资料汇总,一个一个打开操作也是很麻烦.下面就介绍了一种自动化的合并表的方法. 我的思路是创建一个用户存储过程来完成一系列自动化的操作,以下是代码. --存储过程我命名为BackupData,可以使用自己定义的名称. --参数1:@TableTarget 生成的目标表的名称 --参数2:@Ta

SQL Server中减小Log文件尺寸的方法分享_MsSql

首先use [数据库名称];exec sp_helpfile; 使用sp_helpfile查询可知道log 文件的逻辑名称,然后就可以利用DBCC来减小LOG文件BACKUP LOG [数据库名] WITH TRUNCATE_ONLYdbcc shrinkfile ([log文件的逻辑名称],1) 这个方法在MS SQL Server 2008 以及MS SQL Server 2008 R2中不再适用,会提示:TRUNCATE_ONLY is not a valid BACKUP option.

SQL Server中减小Log文件尺寸的方法分享

首先use [数据库名称];exec sp_helpfile; 使用sp_helpfile查询可知道log 文件的逻辑名称,然后就可以利用DBCC来减小LOG文件BACKUP LOG [数据库名] WITH TRUNCATE_ONLYdbcc shrinkfile ([log文件的逻辑名称],1) 这个方法在MS SQL Server 2008 以及MS SQL Server 2008 R2中不再适用,会提示:TRUNCATE_ONLY is not a valid BACKUP option.

JavaScript在IE中“意外地调用了方法或属性访问”_javascript技巧

同样一段代码,两次调用,一次通过,一次异常: function clearSelect(obj){ if(obj && obj.options) obj.options.length=0; } 以下是前人的一些经验: 这是两个经典异常,不知道原理的话很难定位.从下面的代码中可用看到发生的条件 <iframe src="javascript:'<script>top.ff1={abc:function(){}}<\/script>'" wid