暂时挂起sqldependency通知以进行更新

时间:2015-02-06 06:49:24

标签: sql-server sqldependency

我有一个使用SQLDependency监视的SELECT查询。一切正常,但我想暂时挂起依赖,同时我对查询正在监视的数据集进行更新,我知道将从数据库中触发更改通知。

目前我设置了一个标记,表示我正在进行更新,让依赖项触发,然后重置它以便我可以继续监视查询。

必须有一种更优雅的方式来做到这一点。

1 个答案:

答案 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,从而避免更新。希望这会有所帮助。