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