在SQL Server中使用CLR調(diào)用.NET方法實(shí)現(xiàn)思路
更新時(shí)間:2013年02月27日 09:29:33 作者:
在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)方法,然后在SQL Server中調(diào)用這個(gè)方法,接下來(lái)我們將實(shí)現(xiàn)這個(gè)功能做了以下幾個(gè)步驟,詳細(xì)看下本文,感興趣的你可不要錯(cuò)過了哈
介紹
我們一起來(lái)做個(gè)示例,在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)方法,然后在SQL Server中調(diào)用這個(gè)方法。按照微軟所述,通過宿主 Microsoft .NET Framework 2.0 公共語(yǔ)言運(yùn)行庫(kù) (CLR),SQL Server 2005顯著地增強(qiáng)了數(shù)據(jù)庫(kù)編程模型。 這使得開發(fā)人員可以用任何CLR語(yǔ)言(如C#、VB.NET或C++等)來(lái)寫存儲(chǔ)過程、觸發(fā)器和用戶自定義函數(shù)。
我們?nèi)绾螌?shí)現(xiàn)這些功能呢?
為了使用CLR,我們需要做如下幾步:
1、在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)public方法。
2、編譯這個(gè)類為一個(gè)DLL。
3、在SQL Server中注冊(cè)這個(gè)DLL。
4、新建一個(gè)SQL Server函數(shù)來(lái)訪問指定的.NET方法。
接下來(lái),我們一起來(lái)完成一個(gè)示例
首先,在Visual Studio中新建一個(gè)名為“SQLServerCLRTest”的類庫(kù)項(xiàng)目。 然后,新建一個(gè)名為“CLRFunctions”的類,并在其內(nèi)添加一個(gè)名為“HelloWold”的方法,代碼如下:
public class CLRFunctions
{
public static string HelloWorld(string Name)
{
return ("Hello " + Name);
}
}
這是一個(gè)非常簡(jiǎn)單的方法(為了讓SQL Server可以調(diào)用它,它必須要是public和static的),這個(gè)方法有一個(gè)string類型的參數(shù),返回信息為“Hello”加上你傳入的參數(shù)。
現(xiàn)在,我們需要編譯這個(gè)項(xiàng)目為一個(gè)DLL,并在SQL Server中注冊(cè)它。 這也是比較簡(jiǎn)單的,在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:
exec sp_configure 'clr enabled',1
reconfigure
go
注冊(cè)DLL
為了調(diào)用我們寫的那個(gè)方法,需要在SQL Server中注冊(cè)我們剛剛編譯好的那個(gè)DLL。 我們可以在數(shù)據(jù)庫(kù)中使用如下命令來(lái)注冊(cè)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”來(lái)通知SQL Server使用CLR功能。 代碼如下:
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”來(lái)調(diào)用.NET方法。 語(yǔ)法如下:
程序集名.類名.方法名
但是,當(dāng)我使用這個(gè)語(yǔ)法調(diào)用.NET方法的時(shí)候,SQL Server就會(huì)報(bào)錯(cuò),所以為了讓它正常工作,我使用了如下語(yǔ)法:
程序集名.[類名].方法名
現(xiàn)在我們就可以通過如下語(yǔ)句調(diào)用.NET方法了:
SELECT dbo.clrHelloWorld('Mark')
當(dāng)你運(yùn)行這段代碼的時(shí)候,就會(huì)得到一個(gè)返回結(jié)果“Hello Mark”。
我們通過一個(gè)很簡(jiǎn)單的示例演示了如何實(shí)現(xiàn)SQL Server的CLR,它可以給我們帶來(lái)很多非常有用的幫助。
我們一起來(lái)做個(gè)示例,在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)方法,然后在SQL Server中調(diào)用這個(gè)方法。按照微軟所述,通過宿主 Microsoft .NET Framework 2.0 公共語(yǔ)言運(yùn)行庫(kù) (CLR),SQL Server 2005顯著地增強(qiáng)了數(shù)據(jù)庫(kù)編程模型。 這使得開發(fā)人員可以用任何CLR語(yǔ)言(如C#、VB.NET或C++等)來(lái)寫存儲(chǔ)過程、觸發(fā)器和用戶自定義函數(shù)。
我們?nèi)绾螌?shí)現(xiàn)這些功能呢?
為了使用CLR,我們需要做如下幾步:
1、在.NET中新建一個(gè)類,并在這個(gè)類里新建一個(gè)public方法。
2、編譯這個(gè)類為一個(gè)DLL。
3、在SQL Server中注冊(cè)這個(gè)DLL。
4、新建一個(gè)SQL Server函數(shù)來(lái)訪問指定的.NET方法。
接下來(lái),我們一起來(lái)完成一個(gè)示例
首先,在Visual Studio中新建一個(gè)名為“SQLServerCLRTest”的類庫(kù)項(xiàng)目。 然后,新建一個(gè)名為“CLRFunctions”的類,并在其內(nèi)添加一個(gè)名為“HelloWold”的方法,代碼如下:
復(fù)制代碼 代碼如下:
public class CLRFunctions
{
public static string HelloWorld(string Name)
{
return ("Hello " + Name);
}
}
這是一個(gè)非常簡(jiǎn)單的方法(為了讓SQL Server可以調(diào)用它,它必須要是public和static的),這個(gè)方法有一個(gè)string類型的參數(shù),返回信息為“Hello”加上你傳入的參數(shù)。
現(xiàn)在,我們需要編譯這個(gè)項(xiàng)目為一個(gè)DLL,并在SQL Server中注冊(cè)它。 這也是比較簡(jiǎn)單的,在VS中右鍵單擊項(xiàng)目,選擇“生成”后程序就會(huì)生成一個(gè)DLL。 如果你的項(xiàng)目是調(diào)試模式的話,那么就可以在如下所示那樣的路徑里找到編譯好的DLL。
復(fù)制代碼 代碼如下:
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:
復(fù)制代碼 代碼如下:
exec sp_configure 'clr enabled',1
reconfigure
go
注冊(cè)DLL
為了調(diào)用我們寫的那個(gè)方法,需要在SQL Server中注冊(cè)我們剛剛編譯好的那個(gè)DLL。 我們可以在數(shù)據(jù)庫(kù)中使用如下命令來(lái)注冊(cè)DLL(路徑為你的DLL文件的路徑)
復(fù)制代碼 代碼如下:
CREATE ASSEMBLY asmHelloWorld FROM 'C:\SQLServerCLRTest.dll'
在SQL Server中調(diào)用我們的.NET方法
為了調(diào)用.NET方法,我們可以寫一個(gè)SQL Server自定義函數(shù),并在其內(nèi)使用“EXTERNAL NAME”來(lái)通知SQL Server使用CLR功能。 代碼如下:
復(fù)制代碼 代碼如下:
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”來(lái)調(diào)用.NET方法。 語(yǔ)法如下:
程序集名.類名.方法名
但是,當(dāng)我使用這個(gè)語(yǔ)法調(diào)用.NET方法的時(shí)候,SQL Server就會(huì)報(bào)錯(cuò),所以為了讓它正常工作,我使用了如下語(yǔ)法:
程序集名.[類名].方法名
現(xiàn)在我們就可以通過如下語(yǔ)句調(diào)用.NET方法了:
復(fù)制代碼 代碼如下:
SELECT dbo.clrHelloWorld('Mark')
當(dāng)你運(yùn)行這段代碼的時(shí)候,就會(huì)得到一個(gè)返回結(jié)果“Hello Mark”。
我們通過一個(gè)很簡(jiǎn)單的示例演示了如何實(shí)現(xiàn)SQL Server的CLR,它可以給我們帶來(lái)很多非常有用的幫助。
相關(guān)文章
Web.config 和 App.config 的區(qū)別分析
Web.config 和 App.config 的區(qū)別分析,需要的朋友可以參考一下2013-05-05ASP.NET 4.0配置文件中的ClientIDMode屬性詳解
在ASP.NET 4.0中的每個(gè)控件上都多了一個(gè)叫做ClientIDMode的屬性,本文主要介紹了ASP.NET 4.0配置文件中的ClientIDMode屬性詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-11-11ASP.NET Core自定義本地化教程之從文本文件讀取本地化字符串
使用 ASP.NET Core 創(chuàng)建多語(yǔ)言網(wǎng)站,可讓網(wǎng)站擁有更多受眾。下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core自定義本地化教程之從文本文件讀取本地化字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09近幾天對(duì)DataSet的新認(rèn)識(shí)
近幾天對(duì)DataSet的新認(rèn)識(shí)...2007-04-04asp.net 中靜態(tài)方法和動(dòng)態(tài)方法調(diào)用的區(qū)別實(shí)例分析
動(dòng)態(tài)方法,在使用時(shí)需要先創(chuàng)建實(shí)例,才能調(diào)用實(shí)例方法,而靜態(tài)方法則不需要,直接使用即可。2013-06-06談?wù)勅绾卧贏SP.NET Core中實(shí)現(xiàn)CORS跨域
本篇文章主要介紹了如何在ASP.NET Core中實(shí)現(xiàn)CORS跨域,CORS主要是解決Ajax跨域限制的問題,有興趣的可以了解一下。2016-12-12在運(yùn)行時(shí)編輯代碼的 .NET 熱重載的操作方法
今天通過本文給大家分享 Visual Studio 2019 中 16.11(預(yù)覽版1)中的 .NET 熱重載(通過 .NET 6(預(yù)覽版4)中的 dotnet watch 命令行工具),介紹什么是 .NET 熱重載,如何使用這個(gè)特征,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2021-07-07