MSsql 增删改某个表时,用触发器调用DLL通知外部窗体程序
数据库修改记录已经可以触发并顺利调用这个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; } } } }
所有回答(4)
0
SqlDependency 应该比你这个好。当然,按照你这个思路,解决的办法是采用一种进程间通讯的方式,触发器调用的 DLL 将消息通过进程间通讯方式发送给外部进程(比如你的 Winform 程序)。
1
如果表频繁操作,此方案并不可取。个人建议可不用触发器,而用output子句或CDC记录日志,然后通过windows服务实时抓取该日志显示在需要的窗体。
http://www.cnblogs.com/downmoon/archive/2012/04/09/2439462.html
0
我觉得楼上的主意可行,把结果写到文件或数据库里,窗体程序定时检查文件或数据库。
0
为撒要在数据库发生变动的时候触发,而不是在数据写入之后通过代码触发?