我正在使用 SqlDependency 在某些表中的数据发生更改时获取通知。
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- 查询通知通知您某些内容已更改这一事实。如果您想获取自上次以来更改的内容 - 您可能可以使用时间戳列。
关于 2- 查询通知会通知您有关更改的信息,然后被删除。然后您再次订阅通知。删除和创建通知之间的平均时间是不发送有关更改的通知的时间。
查询通知更适合数据不经常更改的情况。例如-一些兑现的分类值。因此,您订阅某个表中的更改,等待更改,并在更改发生时获得最新版本的数据。应该考虑到查询通知也使用服务器资源,因此如果您有巨大的表并且想要获取某些小数据子集的更改,则许多查询可能会在性能方面受到影响(例如索引视图)。
如果您需要根据更改的数据采取一些操作并且每次更改都很重要,那么我猜触发器+服务代理可能会更有效。或者,根据您的需要,更改数据捕获。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)