在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