介绍
首先要感谢微软的开发小组,因为大家可以利用他们高超而创新的技术来在Ms SQL Server 2005存储过程任何支持语言的.Net中编写受控代码了。简单地说,可以调用SQL Server 存储过程中的.net类库中的任何函数了。这项技术使我们可以使用.net语言所具有的特征—扩展性。
描述
我从codeproject中的SQL Server获得了一篇关于使用MQSM的文章,作者是一位专门致力于MQSM和SQL SP中的Messaging的先生。我设法暴露使用SQL server 的汇编和结构的限制性和有限性,所以以后开发者就可以致力于这方面的工作。我将和大家分享我在实际执行时所碰到的问题和经验。
在开始之前,你得使SQL Server执行属性为工作状态(能够执行受控代码),因为在默认的状态下它是不工作的。使其处于SQL Server查询编辑器中的查询状态并能执行如下代码。
sp_configure 'clr enable', 1现在,服务器就开始在runtime的状态下运行受控代码。但是知道这不是什么魔术,而是我们在.net构架中用到的一样的技术。这里只有一点非常重要,那就是SQL Server也可以通过CLR执行代码了,这是不是很伟大?在写这篇文章之前做个很多的关于这方面的调查,发现很多资料都表达了相同的观点。但是我碰到了很多的困难,因为资料太零散了。在这篇文章尽量仿照整个过程重新叙述一遍。我做这项研究是有明确的要求。我一直使用微软的C# .net中的 Message Queuing Service。但一段时间以后,我收到一个命令,要求我从存储过程发一条信息到MSMQ Queue.中去。到那时为止,对于我来说,很有可能使用系统。这样,只用.net runtime的名空间发送信息。我相信大多数开发人员很想知道MSMQ是什么东西。不要担心我会马上进入细节。我将首先从一个简单的应用的实例着手,那就是利用一个简单的字符串返回C# .net类库的函数。让我们从类库着手吧!
GO
启动.net 2005 studio。打开一个新的类库。默认时,class自动生成名为Class1.cs,重新命名它为BaseFunctionClass.cs,类中创建一个如下的代码:
Collapse
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
namespace ManagedCodeAndSQLServer
{
public class BaseFunctionClass
{
#region "Default Constructor"
public BaseFunctionClass()
{
#endregion
}
}
}
#endregion
#region "Welcome Function"
[SqlProcedure]
public static void GetMessage(SqlString strName, out SqlString strMessge)
{
strMessge = "Welcome," + strName + ", " + "your code is getting executed under CLR !";
}