熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2022-06-13   來源: .NET編程 

  什麼是擴展存儲過程?
  
  擴展存儲過程使您得以使用象 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
  
  這樣一個擴展存儲過程就編寫注冊完了下面我們在sql server中測試一下效果
  
  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
From:http://tw.wingwit.com/Article/program/net/201311/12612.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.