首页 新闻 会员 周边 捐助

MSsql 增删改某个表时,用触发器调用DLL通知外部窗体程序

0
悬赏园豆:100 [待解决问题]

数据库修改记录已经可以触发并顺利调用这个DLL了,但是怎么才能在调用的DLL里给主窗体程序传送数据呢?比如把消息显示在主窗体的文本框上或者在DLL里调用主窗体的方法?

//////////////////////////////////////触发器调用的DLL

using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

namespace SQLTrigger
{
public partial class Trigger1
{
[Microsoft.SqlServer.Server.SqlTrigger(
Name = "UF_DML_Trigger",
Target = "dbo.news",
Event = "FOR INSERT, UPDATE, DELETE")]
public static void UF_DML_Trigger()
{
switch (SqlContext.TriggerContext.TriggerAction)//判断触发类型
{
case TriggerAction.Insert:
SqlContext.Pipe.Send("Trigger Insert");//在数据库发消息
break;
case TriggerAction.Update:
SqlContext.Pipe.Send("Trigger Update");
break;
case TriggerAction.Delete:
SqlContext.Pipe.Send("Trigger Delete");
break;
default:
break;
}
}
}
}
anlew的主页 anlew | 初学一级 | 园豆:5
提问于:2014-07-14 17:01
< >
分享
所有回答(3)
0

SqlDependency 应该比你这个好。当然,按照你这个思路,解决的办法是采用一种进程间通讯的方式,触发器调用的 DLL 将消息通过进程间通讯方式发送给外部进程(比如你的 Winform 程序)。

Launcher | 园豆:45050 (高人七级) | 2014-07-14 17:07
1

如果表频繁操作,此方案并不可取。个人建议可不用触发器,而用output子句或CDC记录日志,然后通过windows服务实时抓取该日志显示在需要的窗体。

http://www.cnblogs.com/downmoon/archive/2012/04/09/2439462.html

邀月 | 园豆:25475 (高人七级) | 2014-07-15 09:28
0

我觉得楼上的主意可行,把结果写到文件或数据库里,窗体程序定时检查文件或数据库。

会长 | 园豆:12463 (专家六级) | 2014-07-15 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册