Как организовать уведомление программы о том, что определенные данные в базе поменялись? Желательно, чтобы в случае изменения данных в базе запускалась хранимая процедура, возвращающая данные в программу. Есть ли предусмотренные стандартные классы для этого? Вручную не хочется опрашивать.
Можно использовать класс SqlDependency.
1) Необходимо убедиться, что для целевой БД включен Service Broker
SELECT is_broker_enabled FROM sys.databases WHERE name = 'Database_name';
2) Если Service Broker не включен, то нужно включить его. При этом не должно быть активных соединений с БД
ALTER DATABASE [Database_name] SET ENABLE_BROKER;
3) Пример C# приложения с MSDN
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange+=new
OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
// Handler method
void OnDependencyChange(object sender,
SqlNotificationEventArgs e )
{
// Handle the event (for example, invalidate this cache entry).
}
void Termination()
{
// Release the dependency.
SqlDependency.Stop(connectionString, queueName);
}
В объекте SqlCommand после ключевого слова select в запросе перечислены поля таблиц БД, изменения значений которых необходимо отслеживать.
Также важно, чтобы была явно указана схема (по умолчанию dbo).
При возникновении события вызывается метод OnDependencyChange.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей