一部のテーブルのデータが変更されたときに通知を受け取るために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)「誰か」がデータを非常に速く変更した場合はどうなりますか。一部の変更が通知されない可能性はありますか?(通知から再度購読するまでの時間が気になります。
ありがとうございました。