在SQL Server2005中使用.Net代码
2006-10-24 17:08
288 查看
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用户等等都添加了完全控制的权限了还是要抛出异常,这个就不怎么明白了.希望高手指点.
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用户等等都添加了完全控制的权限了还是要抛出异常,这个就不怎么明白了.希望高手指点.
相关文章推荐
- 在SQL Server2005中使用.Net代码(转)
- 使用VS2010代码分析功能增强ASP.NET应“.NET研究”用程序安全
- 使用.net 的stopWatch 类来剖析你的代码执行时间
- 分享.NET开发中经常使用到的代码片段 完全从实际项目中提取出来,也可被反反复复的重复借用
- 使用.net操作AD域的一些代码共享
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- coding.net代码托管平台使用教程
- 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。 与基础事务管理器的通信失败。 .net 代码里 写事务代码
- .NET 水晶报表使用代码
- .NET及JAVA 中如何使用代码启动程序
- [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
- .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
- 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
- 下载所有的 .NET 开源代码,使用NET MASS DOWNLOADER一次性搞定!太棒了(英文,近期翻译)
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- 使用程序代码安装/卸载.net服务(不使用InstallUtil.exe)
- 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)
- .net使用代码来申请CA证书
- Wince 6.0适用 .NET 使用HttpRequest的Post上传文件,服务端的Web API接收Post上传上来的文件 代码
- .NET : 使用代码性能分析工具