<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      使用C#編寫擴展存儲過程

      [摘要]什么是擴展存儲過程?擴展存儲過程使您得以使用象 C 這樣的編程語言創建自己的外部例程。對用戶來說,擴展存儲過程與普通存儲過程一樣,執行方法也相同。可將參數傳遞給擴展存儲過程,擴展存儲過程可返回結果,...
      什么是擴展存儲過程?


      擴展存儲過程使您得以使用象 C 這樣的編程語言創建自己的外部例程。對用戶來說,擴展存儲過程與普通存儲過程一樣,執行方法也相同。可將參數傳遞給擴展存儲過程,擴展存儲過程可返回結果,也可返回狀態。擴展存儲過程可用于擴展 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 


      日韩精品一区二区三区高清