我使用SqlDependency在某些表中的数据发生更改时获取通知。SQLDependency + Service Broker
private void subscribeBroker()
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
var cmd = new SqlCommand("SELECT text FROM dbo.Test");
cmd.Connection = conn;
var dependency = new SqlDependency(cmd);
dependency.OnChange += dependency_OnChange;
SqlDependency.Start(connString);
cmd.ExecuteNonQuery();
}
}
void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//Do something...
subscribeBroker();
}
它正在工作,但我有一些问题。
1)我没有找到一个方法如何获取信息哪一行被改变。我需要读取整个表格中的所有数据,看看有什么不同。有没有办法如何获取这些信息? (主ID或其他)也许使用不同于SqlDependency的方法?
2)如果“某人”更改数据速度很快。有可能某些更改不会被通知? (我担心的通知,当我再次订阅它的时间之间的时间。
谢谢。如果你想获得什么
关于1,如果您需要行信息,是否有阻止您从简单地请求除了文本以外的ID? – tmesser
不知道这应该如何帮助。比方说,测试表有树行。当第二行被修改时,会引发dependency_OnChange,并且SqlCommand将返回没有关于变化信息的树行。 – Chatumbabub