在SQL Server引用dll的流程


在SQL Server中引用dll分為兩個步驟

1.創建一個dll文件(dll文件分成3種類型,詳細講其中兩種)

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類型

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.右擊“項目”,點擊”生成“或者直接按F6

  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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM