SQL触发器调用.NET的类方法续SQLCLR应用
admin
2023-06-10 04:42:52
0

SQL CLR (SQL Common Language Runtime) 是自 SQL Server 2005 才出现的新功能,它将.NET Framework中的CLR服务注入到 SQL Server 中,使得.NET代码可在SQL Server服务器进程中执行。

通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),开发人员可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数, 改变了以前只能通过T-SQL语言来实现这些功能的局面。因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。

本文记录这两天SQLCLR的研究使用过程,实现调用函数传入GUID,通过命名管道发送到目标应用。数据库是SQL Server2008R2

实现方式是将.NET DLL类库注册到SQL Server,从SQL Server中用户定义函数调用.NET类库中的方法。

★DLL类库

namespace SQLCLRlib
{
    public class ControlActive
    {
        ///


        /// send command
        ///

        /// 目标ID
        /// 1:发送成功 0:发送失败
        public static string sendControlCommand(string MBID)
        {
            try
            {
                NamedPipeClient npc = new NamedPipeClient("localhost", "jc-pipe");
                return npc.Query(MBID);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
    }
}

若方法中需要访问数据库等则需要添加方法的声明:[Microsoft.SqlServer.Server.SqlFunction(SystemDataAccess = SystemDataAccessKind.Read,DataAccess = DataAccessKind.Read)]

否则报异常:在此上下文中不允许访问数据。此上下文可能是不带 DataAccessKind.Read 或 SystemDataAccessKind.Read 标记的函数或方法,也可能是从表值函数的 FillRow 方法为获取数据而进行的回调,还可能是 UDT 验证方法。

VS中也有专门的CLR项目模板:添加新建项目,选择模板"数据库"->SQL Server,选择CLR数据库项目

★SQL Server中的配置

--选择使用哪个数据库

--USE DBname

--查看CLR是否开启
--sp_configure 'clr enabled'
--更改安装CLR 1:开启 0:关闭
--exec sp_configure 'clr enabled',1
--reconfigure
--注册DLL,SQL2008R2支持3.5,类库项目的目标框架必须对应SQL Server的支持版本

--TRUSTWORTHY:SQL实例是否信任数据库的内容,默认OFF

--ALTER DATABASE DBname SET TRUSTWORTHY ON;
--create assembly asmSQLCLRlib from 'D:\...\SQLCLRlib.dll' WITH PERMISSION_SET = UNSAFE;
--创建自定义函数
--create function dbo.clrControlActive
--(
-- @MBID as nvarchar(36)
--)
--returns nvarchar(max) as EXTERNAL NAME [asmSQLCLRlib].[程序集.类名].[方法名]
--使用自定义函数
select dbo.clrControlActive('58A3D48E-A713-49C3-8FC6-76C8DF0DFA34')

参考资料

http://www.cnblogs.com/hsrzyn/archive/2013/05/28/1976555.html

http://www.cnblogs.com/wshcn/archive/2011/12/02/2271630.html

http://www.tuicool.com/articles/fANVzmn 

在此感谢以上资料的作者

相关内容

热门资讯

智汇青联 | 一块提花布,看传... 智汇 青联 绍兴市青年联合会 青春逢盛世,学习正当时。为进一步汇聚青联智慧,赋能青年成长成才,绍兴市...
大庆油田成功构建开发区级三维精... 中新网大庆5月25日电 (王立峰)25日,记者从大庆油田了解到,为进一步盘活杏南开发区区域内难动用储...
原创 硅... 一、硅酸盐的奥秘 硅酸盐是由硅、氧和金属元素组成的化合物大家族,构成了地球岩石圈的主要成分,约占地壳...
原相3955XM+TL3228... 一、前言:小米电竞外设重新起步 小米一直被网友戏称为杂货铺,它提供了五花八门的各种产品,各个领域都有...
修理厨房灯具多少钱 修理厨房灯具的费用会因多种因素而异,以下是一些可能影响价格的因素:1. 灯具类型:不同类型的灯具,如...
灯具维修方法包括什么 灯具坏了可以进行维修,灯具维修方法包括什么?今日就由小编为你一一解答。   1、灯不亮。确认电路...
博世冰箱1个冷冻室结冰如何解决 博世冰箱1个冷冻室结冰如何解决1、首先清理冷冻室的冰块,然后再检查如果冰箱的主板没有问题且压缩机也是...
博世冰箱制冷红灯亮 博世冰箱制冷红灯亮1、可能是冰箱的温度降不下来,或者是制冷剂泄漏导致制冷量不足。温度过高或者过低都会...
博世电冰箱流水孔堵了怎么办? 博世电冰箱流水孔堵了怎么办?可以用打针筒向流水孔里面打气,将流水孔里面的垃圾清理出来就可以了,为了防...
李在明向山西煤矿爆炸事故遇难者... 据凤凰卫视报道,韩国总统李在明5月24日就中国山西省煤矿爆炸事故造成多人遇难表示,向遇难者家属和中国...