Я использую 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) Я не нашел способа, как получить информацию о том, какая строка была изменена. Мне нужно прочитать все данные из всей таблицы, чтобы увидеть, что отличается. Есть ли способ получить эту информацию? (первичный идентификатор или что-то еще) Может быть, использовать другой подход, чем SqlDependency?
2) Что делать, если «кто-то» меняет данные очень быстро. Возможно ли, что некоторые изменения не будут уведомлены? (Меня беспокоит время между уведомлением и временем, когда я снова подпишусь на него.
Спасибо.