• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 使用C#編寫擴展存儲過程

    發表于:2007-05-25來源:作者:點擊數: 標簽:過程存儲擴展什么編寫
    什么是擴展存儲過程? 擴展存儲過程使您得以使用象 C 這樣的編程語言創建自己的外部例程。對用戶來說,擴展存儲過程與普通存儲過程一樣,執行方法也相同??蓪祩鬟f給擴展存儲過程,擴展存儲過程可返回結果,也可返回狀態。擴展存儲過程可用于擴展 Micros
    什么是擴展存儲過程?


    擴展存儲過程使您得以使用象 C 這樣的編程語言創建自己的外部例程。對用戶來說,擴展存儲過程與普通存儲過程一樣,執行方法也相同??蓪祩鬟f給擴展存儲過程,擴展存儲過程可返回結果,也可返回狀態。擴展存儲過程可用于擴展 Microsoft&reg; SQL Server&#8482; 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 {
    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.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>