扩展存储过程是 sql server 可以动态装载并执行的动态链接库 (dll)。扩展存储过程直接在 sql server 的地址空间运行,并使用 sql server 开放式数据服务 (ods) api 编程。
编写好扩展存储过程后,固定服务器角色 sysadmin 的成员即可在 sql server 中注册该扩展存储过程,然后授予其他用户执行该过程的权限。扩展存储过程只能添加到 master 数据库中。
使用 c# 编写扩展存储过程
下面就以一个简单的例子来演示如何用 c# 编写扩展存储过程。
首先,我们创建一个简单的c#类库文件:
//c# file: csserver.cs
using system;
using system.runtime.interopservices;
using system.reflection;
using system.runtime.compilerservices;
[assembly: assemblytitle("csserver")]
[assembly: assemblydescription("test sql .net interop")]
[assembly: assemblyversion("1.0.0.1")]
[assembly: assemblydelaysign(false)]
[assembly: assemblykeyfile("mykey.snk")]
namespace sqlinterop {
public interface itest{
string sayhello();
}
[classinterface(classinterfacetype.autodual)]
public class csharphelper : itest {
public string sayhello() {
return "hello from csharp";
}
}
}
然后创建用 sn -k 为该类库创建一个强名密钥文件,并编译之。
sn -k mykey.snk
csc /t:library csserver.cs
注册该类库:
regasm /tlb:csserver.tlb csserver.dll /codebase
这样一个扩展存储过程就编写注册完了,下面我们在sql server中测试一下效果。
t-sql stored proc.
declare @object int
declare @hr int
declare @property varchar(255)
declare @return varchar(255)
declare @src varchar(255), @desc varchar(255)
-- 创建对象实例。
exec @hr = sp_oacreate sqlinterop.csharphelper, @object out
if @hr <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select hr=convert(varbinary(4),@hr), source=@src, description=@desc
return
end
-- 调用对象方法。
exec @hr = sp_oamethod @object, sayhello, @return out
if @hr <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select hr=convert(varbinary(4),@hr), source=@src, description=@desc
return
end
print @return
-- 销毁对象实例。
exec @hr = sp_oadestroy @object
if @hr <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select hr=convert(varbinary(4),@hr), source=@src, description=@desc
return
end
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




