c#

位置:IT落伍者 >> c# >> 浏览文章

使用C#编写扩展存储过程


发布日期:2021年08月16日
 
使用C#编写扩展存储过程

什么是扩展存储过程?

扩展存储过程使您得以使用象 C 这样的编程语言创建自己的外部例程对用户来说扩展存储过程与普通存储过程一样执行方法也相同可将参数传递给扩展存储过程扩展存储过程可返回结果也可返回状态扩展存储过程可用于扩展 Microsoft® SQL Server&#; 的功能

扩展存储过程是 SQL Server 可以动态装载并执行的动态链接库 (DLL)扩展存储过程直接在 SQL Server 的地址空间运行并使用 SQL Server 开放式数据服务 (ODS) API 编程

编写好扩展存储过程后固定服务器角色 sysadmin 的成员即可在 SQL Server 中注册该扩展存储过程然后授予其他用户执行该过程的权限扩展存储过程只能添加到 master 数据库中

使用 C# 编写扩展存储过程

下面就以一个简单的例子来演示如何用 C#编写扩展存储过程

首先我们创建一个简单的C#类库文件

//C# file: Csservercs

using System;

using SystemRuntimeInteropServices;

using SystemReflection;

using SystemRuntimeCompilerServices;

[assembly: AssemblyTitle(CSServer)]

[assembly: AssemblyDescription(Test SQL NET interop)]

[assembly: AssemblyVersion()]

[assembly: AssemblyDelaySign(false)]

[assembly: AssemblyKeyFile(MyKeysnk)]

namespace SQLInterop {

public interface ITest{

string SayHello();

}

[ClassInterface(ClassInterfaceTypeAutoDual)]

public class CsharpHelper : ITest {

public string SayHello() {

return Hello from CSharp;

}

}

}

然后创建用sn k 为该类库创建一个强名密钥文件并编译之

sn k MyKeysnk

csc /t:library Csservercs

注册该类库

regasm /tlb:Csservertlb csserverdll /codebase

这样一个扩展存储过程就编写注册完了下面我们在sqlserver中测试一下效果

TSQL stored proc

DECLARE @object int

DECLARE @hr int

DECLARE @property varchar()

DECLARE @return varchar()

DECLARE @src varchar() @desc varchar()

创建对象实例

EXEC @hr = sp_OACreate SQLInteropCsharpHelper @object OUT

IF @hr <>

BEGIN

EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT

SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc

RETURN

END

调用对象方法

EXEC @hr = sp_OAMethod @object SayHello @return OUT

IF @hr <>

BEGIN

EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT

SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc

RETURN

END

PRINT @return

销毁对象实例

EXEC @hr = sp_OADestroy @object

IF @hr <>

BEGIN

EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT

SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc

RETURN

END               

上一篇:WebBrowser页与WinForm交互技巧

下一篇:VS.NETRC5无法创建Add-IN工程