我有一个使用SQLDependency监视的SELECT查询。一切正常,但我想暂时挂起依赖,同时我对查询正在监视的数据集进行更新,我知道将从数据库中触发更改通知。
目前我设置了一个标记,表示我正在进行更新,让依赖项触发,然后重置它以便我可以继续监视查询。
必须有一种更优雅的方式来做到这一点。
答案 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,从而避免更新。希望这会有所帮助。