2015-02-06 2 views
2

У меня есть запрос SELECT, который я контролирую с помощью SQLDependency. Все работает нормально, но я хотел бы временно приостановить зависимость, пока я делаю UPDATE для набора данных, который отслеживает запрос, тот, который, как я знаю, выпустит уведомление об изменении из базы данных.временно приостановить уведомление о sqldependency для обновления

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

Должен быть более элегантный способ сделать это, чем это.

+0

Не могли бы вы остановить слушателя и запустить его после обновления? –

ответ

0

Будьте осторожны, используя класс SqlDependency - он имеет problems с утечками памяти. Hovewer, вы можете использовать реализацию с открытым исходным кодом класса SqlDependency - SqlDependencyEx. Он использует триггер базы данных и собственное уведомление Service Broker для получения событий о изменениях таблицы. Это пример использования:

int changesReceived = 0; 
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
      TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{ 
    sqlDependency.TableChanged += (o, e) => changesReceived++; 
    sqlDependency.Start(); 

    // Make table changes. 
    MakeTableInsertDeleteChanges(changesCount); 

    // Wait a little bit to receive all changes. 
    Thread.Sleep(1000); 
} 

Assert.AreEqual(changesCount, changesReceived); 

С SqlDependecyEx вы можете контролировать только INSERT или DELETE, избегая UPDATE. Надеюсь это поможет.