检测sql-server表上的更改

时间:2015-04-17 13:57:24

标签: c# sql-server sql-server-2008

我正在为我的公司开发一个项目,我需要检测另一家公司的表格。换句话说,他们将插入/更新一些数据,我需要捕获这些更改。我愿意尝试SQLDependency,但我不确定速度和性能,还需要很多许可。除了这些缺点之外,我不想错过任何我需要的改变,时间在这个项目中非常重要。

如何以最佳性能检测这些变化?

4 个答案:

答案 0 :(得分:2)

如果您想确保没有错过任何数据,那么SQL依赖关系将不适用于您。 SQL依赖项仅适用于注册接收通知的应用程序范围。这意味着如果您的应用程序因任何原因而关闭,您就会错过一些通知。

您需要查看更接近数据库级别的内容,以确保获得所有通知(数据更改)。

您可能拥有更新登台表的触发器。使用触发器时要小心。触发器中的故障或响应缓慢可能会影响源数据库的性能。操作

您可以启用复制并处理应用程序中的副本数据,并标记您已处理的所有记录。

答案 1 :(得分:1)

您可以查看SQL Server的“更改DataCapture”功能:https://msdn.microsoft.com/en-us/library/cc645937.aspx

答案 2 :(得分:1)

您可以使用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并在事件args对象中接收实际更改的数据(xml)。希望这有帮助。

答案 3 :(得分:0)

由于使用Change Data Capture带来了巨大的开销,我建议使用SQL Server的更改跟踪。

以下是使用与更改跟踪配合使用的Sync Framework API的一些链接: https://msdn.microsoft.com/en-us/library/cc305322(v=sql.110).aspx