您的位置:首页 > 数据库

在SQL Server2005中使用.Net代码(转)

2007-05-08 11:12 239 查看
SQL Server2005的新功能中最吸引人的一点就是可以直接使用.NET的代码.
SQL Server2005中能执行4种不同类型的.NET过程:
1,标量值用户定义函数.
2,表值用户定义函数.
3,用户定义过程.
4,用户定义函数.
SQLServer2005添加了对.NET的支持有什么好处啦:
1,完成一些十分复杂的逻辑.比如要实现复杂的数学运算.
2,调用.NET强大的类库.比如加密函数等.
3,使用在SQL中很难调用的系统资源,比如事件日志.
既然 这样那我们接下来就做一个简单的调用.NET代码的例子:
1.在VS中编写好我们要实现的函数功能.记住这个函数是static函数.而且要添加属性SqlFunction.
比如我们写一个简单的开平方函数:
新建"类库"项目,填入如下代码并编译成dll.

 


using System;


using Microsoft.SqlServer.Server;


namespace SQLFunction




...{


    public class UserFunction




    ...{


        [SqlFunction(DataAccess=DataAccessKind.None)]


        public static double Sqrt(int a)




        ...{


            return Math.Sqrt(a);


        }


    }


}



 

2.打开Management Studio,点开某个需要添加程序集的数据库,然后点击"可编程性"->"程序集",右键新建程序集.将上面代码生成的dll路径添加到里面便完成.这个时候"程序集"下面就出现了我们刚添加的程序的名字SQLFunction.
另外一种方法是使用SQL语句:
create assembly Conversions
from 'C:/SQLFunction.dll'
这样就把程序集命名为了Conversions.
3.添加自定义函数
create function dotNetSqrt(@num int)
returns float
as external name Conversions.[SQLFunction.UserFunction].Sqrt
这儿需要说明的是SQL中的输入输出参数必须和.NET相同,不然无法完成.
name 后面跟的格式是: 程序集名.[名字空间.类名].函数名
4.开启CLR集成功能
默认情况下,Microsoft SQL Server 中禁用公共语言运行库 (CLR) 集成功能,必须启用才能使用通过 CLR 集成实现的对象。要启用 CLR 集成,请如下所示使用 sp_configure 存储过程的 clr enabled 选项:
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
到此我们的工作已经做完了.那么我们就来测试一下,输入
select dbo.dotNetSqrt(2)
这个是求2的平方根.如果出现了结果1.1412...那么就说明我们大功告成!
在使用.Net代码的时候我还有一个问题没有搞懂,那就是运行这个程序集的用户到底是哪个?因为我在程序集的一个函数里面执行了IO操作,把输入或输出记录写到硬盘上,但是我在数据库中执行调用这个程序集的时候总是报权限异常.我把文件夹的Network Server用户,Everyone用户等等都添加了完全控制的权限了还是要抛出异常,这个就不怎么明白了.希望高手指点.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐