在SQL Server中使用CLR調用.net的dll

介紹
    我們一起來做個示例,在.NET中新建一個類,並在這個類裏新建一個方法,然後在SQL Server中調用這個方法。按照微軟所述,通過宿主 Microsoft .NET Framework 2.0 公共語言運行庫 (CLR),SQL Server 2005顯著地增強了數據庫編程模型。 這使得開發人員可以用任何CLR語言(如C#、VB.NET或C++等)來寫存儲過程、觸發器和用戶自定義函數。


我們如何實現這些功能呢?
爲了使用CLR,我們需要做如下幾步:
    1、在.NET中新建一個類,並在這個類裏新建一個public方法。
    2、編譯這個類爲一個DLL。
    3、在SQL Server中註冊這個DLL。
    4、新建一個SQL Server函數來訪問指定的.NET方法。


    接下來,我們一起來完成一個示例
    首先,在Visual Studio中新建一個名爲“SQLServerCLRTest”的類庫項目。 然後,新建一個名爲“CLRFunctions”的類,並在其內添加一個名爲“HelloWold”的方法,代碼如下:
public class CLRFunctions
{
    public static string HelloWorld(string Name)
    {
        return ("Hello " + Name);
    }
}
    這是一個非常簡單的方法(爲了讓SQL Server可以調用它,它必須要是public和static的),這個方法有一個string類型的參數,返回信息爲“Hello”加上你傳入的參數。

    現在,我們需要編譯這個項目爲一個DLL,並在SQL Server中註冊它。 這也是比較簡單的,在VS中右鍵單擊項目,選擇“生成”後程序就會生成一個DLL。 如果你的項目是調試模式的話,那麼就可以在如下所示那樣的路徑裏找到編譯好的DLL。
C:/Documents and Settings/mark.smith/My Documents/Visual Studio 2005/Projects/SQLServerCLRTest/SQLServerCLRTest/bin/Debug/SQLServerCLRTest.dll
    找到這個DLL後,我們就可以把它拷貝到我們的SQL Server機器上了,如果是相同機器的話我們只要記住這個路徑即可。


啓用CLR功能
    默認情況下,SQL Server中的CLR是關閉的,所以我們需要執行如下命令打開CLR:
exec sp_configure 'clr enabled',1  
reconfigure  
go

註冊DLL
    爲了調用我們寫的那個方法,需要在SQL Server中註冊我們剛剛編譯好的那個DLL。 我們可以在數據庫中使用如下命令來註冊DLL(路徑爲你的DLL文件的路徑)
CREATE ASSEMBLY asmHelloWorld FROM 'C:/SQLServerCLRTest.dll'  

在SQL Server中調用我們的.NET方法
     爲了調用.NET方法,我們可以寫一個SQL Server自定義函數,並在其內使用“EXTERNAL NAME”來通知SQL Server使用CLR功能。 代碼如下:
CREATE FUNCTION dbo.clrHelloWorld  
(  
    @name as nvarchar(200)  
)   
RETURNS nvarchar(200)  
AS EXTERNAL NAME asmHelloWorld.[SQLServerCLRTest.CLRFunctions].HelloWorld
    上面的自定義函數做了兩項工作。 首先是聲明瞭一個nvarchar參數,它等同於.NET裏的string類型(如果將其設置爲varchar並且後面使用了“EXTERNAL NAME”的話就會報錯)。然後使用“EXTERNAL NAME”來調用.NET方法。 語法如下:
程序集名.類名.方法名
    但是,當我使用這個語法調用.NET方法的時候,SQL Server就會報錯,所以爲了讓它正常工作,我使用瞭如下語法:
程序集名.[類名].方法名
    現在我們就可以通過如下語句調用.NET方法了:
SELECT dbo.clrHelloWorld('Mark')
    當你運行這段代碼的時候,就會得到一個返回結果“Hello Mark”。


    我們通過一個很簡單的示例演示瞭如何實現SQL Server的CLR,它可以給我們帶來很多非常有用的幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章