使用C 編寫擴充套件儲存過程

2021-04-02 12:50:19 字數 2315 閱讀 1735

什麼是擴充套件儲存過程?

擴充套件儲存過程使您得以使用象 c 這樣的程式語言建立自己的外部例程。對使用者來說,擴充套件儲存過程與普通儲存過程一樣,執行方法也相同。可將引數傳遞給擴充套件儲存過程,擴充套件儲存過程可返回結果,也可返回狀態。擴充套件儲存過程可用於擴充套件 microsoft® sql server™ 2000 的功能。

擴充套件儲存過程是 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

[classinte***ce(classinte***cetype.autodual)]

public class csharphelper : itest

} }

然後建立用 sn -k 為該類庫建立乙個強名金鑰檔案,並編譯之。

sn -k mykey.snk

csc /t:library csserver.cs

註冊該類庫:

rega** /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 編寫擴充套件儲存過程

什麼是擴充套件儲存過程?擴充套件儲存過程使您得以使用象 c 這樣的程式語言建立自己的外部例程。對使用者來說,擴充套件儲存過程與普通儲存過程一樣,執行方法也相同。可將引數傳遞給擴充套件儲存過程,擴充套件儲存過程可返回結果,也可返回狀態。擴充套件儲存過程可用於擴充套件 microsoft sql ser...

mysql過程編寫 mysql儲存過程編寫(一)

首先需要知道mysql儲存過程的作用 1 儲存過程能實現較快的執行速度 2 儲存過程能過減少網路流量 3 儲存過程可被作為一種安全機制來充分利用 儲存過程的格式 create procedure 儲存過程名 過程引數 特性引數 begin endeg delimiter create procedu...

MySQL儲存過程編寫

我想把乙個資料匯入另外乙個資料表,所以我用mysql在上面實現儲存過程.發現和sql server還是有區別的.具體寫法如下 drop procedure if exists test proc delimiter create procedure test proc begin 宣告乙個標誌don...