在SQL Server中引用dll分爲兩個步驟html
1.建立一個dll文件(dll文件分紅3種類型,詳細講其中兩種)web
2.把dll文件放進SQL Server的程序集中。而後定義一個Function,就能夠經過該Function來引用dll中的函數。數據庫
建立一個dll文件安全
1.點擊「文件」->「新建」->「項目」->類庫,把命名空間改爲StringHelp,添加以下代碼服務器
(框架必須改成.NET3.5及3.5如下,由於SQL Server 2008只是支持.NET 3.5及一下,.NET 4.0是2010年發佈的,不支持也很正常)網絡
namespace StringHelp //命名空間 { public class ClassConvert //類名 { //把輸入的字符串中的小寫字母變成大寫字母 public static string ToUpper(string vInputString) //函數必須爲靜態函數,應爲靜態函數不用實例化類就能夠調用 { return vInputString.ToUpper(); } } }
第一種dll類型app
using System.Text; using System.Net; using System.IO; namespace GetNewsByHttp { public class ClassGetNews {
//該函數是經過HttpWebRequest來獲取網頁
//具體代碼能夠忽略,可是要記住這裏使用到了網絡 public static string GetCnblogs(string vNewsUrl) { string returnValue = ""; HttpWebRequest Request =(HttpWebRequest) WebRequest.Create(vNewsUrl); Request.Method = "GET"; HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); StreamReader Reder =new StreamReader( Response.GetResponseStream(),Encoding.UTF8); returnValue= Reder.ReadToEnd(); Reder.Close(); Response.Close(); return returnValue; } } }
第二種dll類型,該類型的dll須要進行非對稱的簽名,切記切記 框架
爲何要劃分dll類型,待會在SQL Server中添加dll中會有進一步的說明。函數
2.右擊「項目」,點擊」生成「或者直接按F6ui
3.右擊「項目」,點擊「在文件資源管理系統中打開文件夾」,點擊bin->debug,而後就會看到一個StringHelp.dll文件。
在SQL中引用dll文件
1.容許SQL Server容許運行用戶程序集
在SQL Server中運行以下代碼
EXEC sp_configure 'clr enabled' , '1'; --0表明不容許,1表明運行 RECONFIGURE;
clr enabled的官方說明
2.根據不一樣的dll文件方式
首先說明一下這裏的dll的劃分方式。根據dll中的代碼使用到不一樣的資源,在SQL Server中運行程序集(dll)是,必須指明是在如下三種安全級別的哪種下運行。
2.1第一種dll
直接使用SQL語句建立程序集
create assembly TestDll from 'C:\Users\聰\Documents\Visual Studio 2012\Projects\StringHelp\StringHelp\obj\Debug\StringHelp.dll'
其中TestDll是你在數據庫中爲這個程序集起的名字。
2.2第二中dll
方法一:
(1)過程序集文件建立非對稱密鑰。
(2)必須建立映射到此非對稱密鑰的登陸名
(3)向此登陸名授予 EXTERNAL ACCESS ASSEMBLY 或 UNSAFE ASSEMBLY 權限。
USE master --這個數據庫必定是master
--建立非對稱密鑰
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\Users\聰\Documents\visual studio 2012\Projects\GetNewsByHttp\GetNewsByHttp\bin\Debug\GetNewsByHttp.dll'
--建立登陸名
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey
--把權限授予給該登陸名 GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
方法二:
在SQL Server中執行以下代碼
ALTER DATABASE myDataBase SET TRUSTWORTHY ON
注意,若是你的dll文件中,引用了其dll文件,那麼必須在引入dll以前,先引用其程序集。如你的dll文件使用到了system.web dll文件,那麼必須在引用TestDll以前
以一樣的方法引用system.web dll文件。
2.建立一個Function,使用該dll文件
使用以下SQL語句
CREATE FUNCTION dbo.ToUpper --該函數名字 ( @InputString as nvarchar(500) ) RETURNS nvarchar(200) --返回類型 AS EXTERNAL NAME TestDll.[StringHelp.ClassConvert].ToUpper
Create Function GetNews ( @FileName nvarchar(50) ) returns nvarchar(max) as EXTERNAL NAME SQLCLRTest.[GetNewsByHttp.ClassGetNews].GetCnblogs
注意一下標紅的那幾個單詞。
TestDll是指你程序集中dll的名稱。
StringHelp是指dll文件中那個類的命名空間
ClassConvert是指dll文件中那個類的類名
ToUpper是指dll文件中那個被調用的靜態方法
最後,即可以這樣來調用該函數
print dbo.ToUpper('abc')
輸出的結果爲ABC
print dbo.GetNews('http://www.cnblogs.com/WEI-CONG/p/4324715.html')
輸出的結果爲本網頁的html代碼
最後感謝該文章給個人啓示http://www.cnblogs.com/zhongxinWang/p/4211179.html
天天進步一點點
2015-03-09