使用C#編寫SQL Server的擴充預存程序

來源:互聯網
上載者:User

下面就以一個簡單的例子來示範如何用 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

註明:擴充預存程序

擴充預存程序使您得以使用象 C 這樣的程式設計語言建立自己的外部常式。對使用者來說,擴充預存程序與普通預存程序一樣,執行方法也相同。可將參數傳遞給擴充預存程序,擴充預存程序可返回結果,也可返回狀態。擴充預存程序可用於擴充 Microsoft&reg; SQL Server&#8482; 2000 的功能。
擴充預存程序是 SQL Server 可以動態裝載並執行的動態連結程式庫 (DLL)。擴充預存程序直接在 SQL Server 的地址空間運行,並使用 SQL Server 開放式資料服務 (ODS) API 編程。
編寫好擴充預存程序後,固定伺服器角色 sysadmin 的成員即可在 SQL Server 中註冊該擴充預存程序,然後授予其他使用者執行該過程的許可權。擴充預存程序只能添加到 master 資料庫中。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.