C# SQLDependency+;服务经纪人
我使用SqlDependency在某些表中的数据发生更改时获取通知C# SQLDependency+;服务经纪人,c#,sql,sql-server,service-broker,sqldependency,C#,Sql,Sql Server,Service Broker,Sqldependency,我使用SqlDependency在某些表中的数据发生更改时获取通知 private void subscribeBroker() { using (var conn = new SqlConnection(connString)) { conn.Open(); var cmd = new SqlCommand("SELECT text FROM dbo.Test"); cmd
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-查询通知通知您有关更改,然后被删除。然后您再次订阅通知。从删除通知到创建通知之间的平均时间是关于更改的通知不发送的时间
查询通知更多的情况下,当你的数据不经常改变。例如,一些兑现分类价值。所以你订阅的变化,在一些表,等待更改,并在发生的时候,你得到最新版本的数据。应该考虑,查询通知也使用服务器资源,所以如果你有胡ge表,并希望对一些小数据子集进行更改,许多查询可能会在性能方面受到影响(类似于索引视图)
如果您需要根据更改的数据采取一些措施,并且每个更改都很重要,那么我猜trigger+service broker可能会更有效。或者,根据您的需要,更改数据捕获。关于1,如果您需要行信息,是否有什么东西阻止您仅请求文本之外的ID?否我不确定这会有什么帮助。比方说,测试表有树行。当修改第二行时,会引发dependency_OnChange,SqlCommand将返回树行,而不包含任何有关更改的信息。