Я работаю над проектом, в котором мне нужно следить за одной из таблиц нашей базы данных, и для любой вставки новой записи мне нужно обновить ее на клиенте.
Для этого я использую SqlDependency
для подписки сервис-брокера. Также используйте SignalR для немедленного обновления клиентской части.
У меня такой вопрос: моя подписка действительна только на одно изменение, раз я получаю одно обновление, не знаю как, моя подписка удаляется автоматически.
Вот код, который подписывается на базу данных для изменений:
SqlDependency.Start(connectionString);
SubScribeForAttendance();
SqlDependency.Stop(connectionString);
Функция подписки:
public void SubScribeForAttendance()
{
// We have selected the entire table as the command, so SQL Server executes this script and sees if there is a change in the result, raise the event
string commandText = @"Select bnr,knrhex From dbo.TableName where bnr > SomeId";
// Start the SQL Dependency
SqlDependency.Start(connectionString);
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(commandText, connection))
{
connection.Open();
var sqlDependency = new SqlDependency(command);
sqlDependency.OnChange += Dependency_OnBookingChange;
// NOTE: You have to execute the command, or the notification will never fire.
using (command.ExecuteReader())
{
}
}
}
}