我正在为我的公司开发一个项目,我需要检测另一家公司的表格。换句话说,他们将插入/更新一些数据,我需要捕获这些更改。我愿意尝试SQLDependency
,但我不确定速度和性能,还需要很多许可。除了这些缺点之外,我不想错过任何我需要的改变,时间在这个项目中非常重要。
如何以最佳性能检测这些变化?
答案 0 :(得分:2)
您需要查看更接近数据库级别的内容,以确保获得所有通知(数据更改)。
您可能拥有更新登台表的触发器。使用触发器时要小心。触发器中的故障或响应缓慢可能会影响源数据库的性能。操作
您可以启用复制并处理应用程序中的副本数据,并标记您已处理的所有记录。
答案 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