设为首页 收藏本站
查看: 888|回复: 0

[经验分享] 在SQL Server引用dll的流程

[复制链接]

尚未签到

发表于 2015-7-5 12:21:39 | 显示全部楼层 |阅读模式
  在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.iyunv.com/WEI-CONG/p/4324715.html')                      
  输出的结果为本网页的html代码
  最后感谢该文章给我的启示http://www.iyunv.com/zhongxinWang/p/4211179.html
  每天进步一点点
  2015-03-09
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83348-1-1.html 上篇帖子: SQL Server 权限管理 下篇帖子: 浅谈SQL Server 对于内存的管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表