本人由于需要做一个小项目,项目的内容是这样的:SQl Server中有个报警信息表(tb_Alarm_info),当这个报警信息表有新的数据插入时,将这个产生的报警信息发送到相关人员手机上;
解决思路:
1、使用 visual studio 建立一个 C# 类库文件,将请求短信发送的代码写在这个类库文件中,然后编译成 .dll文件;
2、在SQl Server中 引入这个 .dll 程序集 ;
3、在 Sql Server 中自定义一个 CLR 函数,用于调用 .dll里面的函数
4、在(tb_Alarm_info)表中,创建 insert 触发器
遇到的问题:在Sql Server中引入 System.Web.dll程序集 用于 http post请求时,报错;网上也没有一个系统的解决办法,所以想写这个博客来帮助遇到同样问题的朋友;
下面是详解:
1、使用visual studio软件,建立 C# 类库文件,将短信请求代码写在类库文件中
新建项目:
新建一个空的解决方案(不会自动引入其他不需要的程序集)
在空解决方案中,新建一个项目
然后新增一个C#类库文件
将需要被数据库调用的函数写在类中,注意(需要被数据库调用的方法,要 声明为 static 静态方法,这样做的目的是不用实例化,即可直接调用)
然后将类库生产 .dll文件
二、打开SQl Server 中的数据库,把在 visual studio 编译的 .dll 程序集文件 引入SQL server 数据库中
第一种方法就是直接将文件引入:
第二种方法:是使用代码,创建程序集将 .dll 文件引入
CREATE ASSEMBLY SMS_Send FROM 'C:\Users\Administrator\Desktop\SMS_Send\Message_Alarm_Send.dll' WITH PERMISSION_SET = UNSAFE GO
由于我的 C# 代码中 代码中 引入了 System.Web.dll 程序集,而 SQL Server中并没有这个数据集,所以导致报错
所以处理办法就是:
将 C# 类库中使用到的 System.Web.dll 程序引入到数据库中
– 将 数据库 属性修改为 可信任其中内容 (将KangGSIEMGS 修改为你的数据库名)
ALTER DATABASE KangGSIEMGS SET TRUSTWORTHY on;
– 将高级配置操作设置 为1 ,进行高级配置
exec sp_configure 'show advanced options', '1'; Go
– 设置 启用 CLR 函数
EXEC sp_configure 'clr enabled' , '1'; --0代表不允许,1代表运行
RECONFIGURE;
最关键的一步来了:将System.Web.dll引入到SQL server 数据库中(注意:引入的是本地电脑中的System.Web.dll)
-- 引入System.Web.Dll 程序集
CREATE ASSEMBLY System_Web --导入 DLL 程序集
FROM
'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
WITH PERMISSION_SET =