Как организовать уведомление программы о том, что определенные данные в базе поменялись? Желательно, чтобы в случае изменения данных в базе запускалась хранимая процедура, возвращающая данные в программу. Есть ли предусмотренные стандартные классы для этого? Вручную не хочется опрашивать.
Можно использовать класс 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.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости