在SQL Server引用dll的流程

在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)是,必須指明是在如下三種安全級別的哪種下運行。

  • SAFE(它只能經過進程中的託管提供程序在服務器內執行計算和數據訪問)
  • EXTERNAL_ACCESS(適用於代碼須要訪問服務器以外的資源(如文件、網絡、註冊表和環境變量))
  • UNSAFE(程序集並不是可驗證爲安全的,或程序集要求進一步訪問受限資源(如 Microsoft Win32 API))

        這是關於建立程序集是指定安全性問題,詳情點擊官網解析

    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

相關文章
相關標籤/搜索