zoukankan      html  css  js  c++  java
  • 在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聪DocumentsVisual Studio 2012ProjectsStringHelpStringHelpobjDebugStringHelp.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聪Documentsvisual studio 2012ProjectsGetNewsByHttpGetNewsByHttpinDebugGetNewsByHttp.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

      

  • 相关阅读:
    解决Android Studio和Android SDK Manager无法在线更新的问题[转]
    Git 推送和删除标签
    使用adbWireless无线调试Android真机设备[转]
    Android模拟器对应的电脑快捷键说明
    Windows下用cmd命令安装及卸载服务[转]
    重置SQLSERVER表的自增列,让自增列重新计数【转】
    解决“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问……”【转】
    网页编辑器CKEditor4.3.1+CKFinder2.4+JW Player6.7(视频播放器)集成
    JW Player 6.7(网页视频播放器,可在手机中播放),自定义Logo和右键菜单链接,支持MP3、MP4、FLV等格式,支持通过HTML5、FLash播放
    Sqlserver列出所有数据库名,表名,字段名【转】
  • 原文地址:https://www.cnblogs.com/WEI-CONG/p/4324715.html
Copyright © 2011-2022 走看看