Изменение SqlDependency работает только для одного изменения

Я работаю над проектом, в котором мне нужно следить за одной из таблиц нашей базы данных, и для любой вставки новой записи мне нужно обновить ее на клиенте.

Для этого я использую 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())
            {
            }
        }
    }
}

person Mox Shah    schedule 30.09.2016    source источник


Ответы (1)


Вы должны повторно регистрировать зависимость sql каждый раз, когда запускается уведомление, зависимость sql регистрируется только для одного уведомления.

Вызовите SubScribeForAttendance() в конце Dependency_OnBookingChange, чтобы повторно зарегистрировать зависимость sql

Я нашел это решение по этой ссылке

person Riaz Raza    schedule 30.09.2016
comment
Так что повторная подписка - единственный вариант? Разве мы не можем зарегистрироваться для нескольких изменений? - person Mox Shah; 30.09.2016
comment
Нет, сервер sql регистрируется только для одного изменения, после запуска он освобождает ловушку. - person Riaz Raza; 30.09.2016