数据库 通过表触发器 实时通知应用程序

/*
Sqlserver数据库开始相关服务
以下示例显示了如何查看 OLE Automation Procedures 的当前设置。0未启用
*/
EXEC sp_configure 'show advanced option', '1' --只有这个高级选项被打开的时候,才有权限修改其他配置。 go RECONFIGURE --运行RECONFIGURE语句进行安装,也就是说,使以上语句生效 go EXEC sp_configure 'Ole Automation Procedures'; GO --启用Ole Automation Procedures sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO ---通过sql server 2008 调用应用程序 CREATE PROCEDURE [dbo].[pro_NotifyApp]( @Id NVARCHAR(20), @Content NVARCHAR(MAX) ) AS BEGIN declare @ServiceUrl as varchar(1000) PRINT 'http://localhost:789/home/GetNotify?id=' + @Id + '&message=' + @Content --通过http协议调用的接口地址' set @ServiceUrl = 'http://localhost:789/home/GetNotify?id=' + @Id + '&message=' + @Content Declare @Object as Int Declare @ResponseText as Varchar(8000) Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false' Exec sp_OAMethod @Object, 'send' Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT Select @ResponseText Exec sp_OADestroy @Object END --在对应表上创建 更新触发器,监控数据是否有变化,变化即刻通知应用程序 CREATE TRIGGER notify_trigger ON [dbo].[TestTable] AFTER UPDATE AS BEGIN /* update触发器会在更新数据后, 将更新前的数据保存在deleted表中,更 新后的数据保存在inserted表中。 */ DECLARE @UpdateID NVARCHAR(20) DECLARE @UpdateContent Varchar(MAX) set @UpdateID=(select Deleted.D_Id from Deleted) set @UpdateContent=(select Inserted.D_Amount from Inserted) EXEC pro_NotifyApp @UpdateID, @UpdateContent END 
        //mvc项目  http://localhost:789/home/GetNotify
        public ActionResult GetNotify() { string id = Request["id"]; string message = Request["message"]; //插入数据 string txt = string.Empty; var date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); txt = string.Format("{0} ID:{1} Message:{2}", date, id, message); FileStream fs = null; StreamWriter sw = null; try { string path = "D:\\111.txt";//文件的路径,保证文件存在。 fs = new FileStream(path, FileMode.Append); sw = new StreamWriter(fs); sw.WriteLine(txt); } catch (Exception) { throw; } finally { sw.Dispose(); sw.Close(); fs.Dispose(); fs.Close(); } return null; }

 

--测试
/*触发器两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,
deleted 保存的是 delete 或 update 之前所影响的记录形成的表。*/
UPDATE dbo.TestTable SET  D_Amount=209 WHERE D_Id=5004

 

转载于:https://www.cnblogs.com/zxh1919/p/10213001.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值