【问题标题】:temporarily suspend sqldependency notification for update暂时挂起更新的sqldependency通知
【发布时间】:2015-02-06 06:49:24
【问题描述】:

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

目前我设置了一个标志来标记我正在执行更新的事实,让依赖项触发,然后我将其重置,以便我可以继续监视查询。

必须有比这更优雅的方法。

【问题讨论】:

  • 你不能停止监听器并在更新后启动它吗?

标签: sql-server sqldependency


【解决方案1】:

小心使用 SqlDependency 类 - 它的 problems 存在内存泄漏。但是,您可以使用 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。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多