IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MSSQL → 在SQL Server中使用CLR調(diào)用.NET方法

在SQL Server中使用CLR調(diào)用.NET方法

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

介紹

我們一起來做個(gè)示例,在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)方法,然后在SQL Server中調(diào)用這個(gè)方法。按照微軟所述,通過宿主 Microsoft .NET Framework 2.0 公共語言運(yùn)行庫 (CLR),SQL Server 2005顯著地增強(qiáng)了數(shù)據(jù)庫編程模型。 這使得開發(fā)人員可以用任何CLR語言(如C#、VB.NET或C++等)來寫存儲(chǔ)過程、觸發(fā)器和用戶自定義函數(shù)。

我們?nèi)绾螌?shí)現(xiàn)這些功能呢?

為了使用CLR,我們需要做如下幾步:

1、在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)public方法。

2、編譯這個(gè)類為一個(gè)DLL。

3、在SQL Server中注冊這個(gè)DLL。

4、新建一個(gè)SQL Server函數(shù)來訪問指定的.NET方法。

接下來,我們一起來完成一個(gè)示例

首先,在Visual Studio中新建一個(gè)名為"SQLServerCLRTest"的類庫項(xiàng)目。 然后,新建一個(gè)名為"CLRFunctions"的類,并在其內(nèi)添加一個(gè)名為"HelloWold"的方法,代碼如下:

以下為引用的內(nèi)容:

public class CLRFunctions

{

public static string HelloWorld(string Name)

{

return ("Hello " + Name);

}

}

這是一個(gè)非常簡單的方法(為了讓SQL Server可以調(diào)用它,它必須要是public和static的),這個(gè)方法有一個(gè)string類型的參數(shù),返回信息為"Hello"加上你傳入的參數(shù)。

現(xiàn)在,我們需要編譯這個(gè)項(xiàng)目為一個(gè)DLL,并在SQL Server中注冊它。 這也是比較簡單的,在VS中右鍵單擊項(xiàng)目,選擇"生成"后程序就會(huì)生成一個(gè)DLL。 如果你的項(xiàng)目是調(diào)試模式的話,那么就可以在如下所示那樣的路徑里找到編譯好的DLL。

C:\Documents and Settings\mark.smith\My Documents\Visual Studio 2005\Projects\SQLServerCLRTest\SQLServerCLRTest\bin\Debug\SQLServerCLRTest.dll

找到這個(gè)DLL后,我們就可以把它拷貝到我們的SQL Server機(jī)器上了,如果是相同機(jī)器的話我們只要記住這個(gè)路徑即可。

啟用CLR功能

默認(rèn)情況下,SQL Server中的CLR是關(guān)閉的,所以我們需要執(zhí)行如下命令打開CLR:

以下為引用的內(nèi)容:

exec sp_configure 'clr enabled',1

reconfigure

go

注冊DLL

為了調(diào)用我們寫的那個(gè)方法,需要在SQL Server中注冊我們剛剛編譯好的那個(gè)DLL。 我們可以在數(shù)據(jù)庫中使用如下命令來注冊DLL(路徑為你的DLL文件的路徑)

CREATE ASSEMBLY asmHelloWorld FROM 'C:\SQLServerCLRTest.dll'

在SQL Server中調(diào)用我們的.NET方法

為了調(diào)用.NET方法,我們可以寫一個(gè)SQL Server自定義函數(shù),并在其內(nèi)使用"EXTERNAL NAME"來通知SQL Server使用CLR功能。 代碼如下:

以下為引用的內(nèi)容:

CREATE FUNCTION dbo.clrHelloWorld

(

@name as nvarchar(200)

)

RETURNS nvarchar(200)

AS EXTERNAL NAME asmHelloWorld.[SQLServerCLRTest.CLRFunctions].HelloWorld

上面的自定義函數(shù)做了兩項(xiàng)工作。 首先是聲明了一個(gè)nvarchar參數(shù),它等同于.NET里的string類型(如果將其設(shè)置為varchar并且后面使用了"EXTERNAL NAME"的話就會(huì)報(bào)錯(cuò))。然后使用"EXTERNAL NAME"來調(diào)用.NET方法。 語法如下:

程序集名.類名.方法名

但是,當(dāng)我使用這個(gè)語法調(diào)用.NET方法的時(shí)候,SQL Server就會(huì)報(bào)錯(cuò),所以為了讓它正常工作,我使用了如下語法:

程序集名.[類名].方法名

現(xiàn)在我們就可以通過如下語句調(diào)用.NET方法了:

SELECT dbo.clrHelloWorld('Mark')

當(dāng)你運(yùn)行這段代碼的時(shí)候,就會(huì)得到一個(gè)返回結(jié)果"Hello Mark"。

我們通過一個(gè)很簡單的示例演示了如何實(shí)現(xiàn)SQL Server的CLR,它可以給我們帶來很多非常有用的幫助。

關(guān)鍵詞標(biāo)簽:SQL Server

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

    人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級(jí)到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法