【问题标题】:How can i track any changes to Database table我如何跟踪对数据库表的任何更改
【发布时间】:2013-10-30 12:52:13
【问题描述】:

我有 2 个应用程序,一个用于添加数据库,另一个用于监视数据库中的任何更改,

如何跟踪 db 中的任何更改(新记录、现有记录的更改、删除),是否有像系统观察者这样的类来观察数据库表?

我搜索了SQL依赖类,但不知道是否适合我的场景。

提前致谢,

【问题讨论】:

  • 您可以使用触发器来跟踪更改
  • SQLDependency 旨在在发生更改时通知应用程序的中间层(与更传统的轮询相反)。这是否是一个合适的选择需要更多信息。
  • 数据库跟踪其事务日志中已有的所有更改。如果您只需要跟踪,那么额外的事务日志查看器可能就足够了。

标签: c# .net sql-server-2008 sqldependency


【解决方案1】:

您可以使用trigger 来检查它们在您的实例中执行的INSERT、UPDATE 或DELETE 查询。

此外,SQL Server 有一个很棒的工具,SQL Server Profiler。您可以使用它连接到您的实例并收听每个查询和操作。

这个SO question 或许能帮到你。

【讨论】:

    【解决方案2】:

    我不建议在这种情况下使用触发器,因为这会增加负担。

    但是有两种选择

    1)。 Microsoft SQL Server - 更改数据捕获 (CDC) - here 不幸的是,这在标准版本中不可用。 但您可以在 Enterprise、Developer 和 Evaluation 版本中找到

    2)。 CodePlex-StandardCDC here

    3)。 更改跟踪 (CT) 可以作为一个选项 请参考enter link description here

    【讨论】:

      【解决方案3】:

      使用开源类SqlDependencyEx。它很容易配置和使用:

      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);
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-05-16
        • 2023-03-18
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        相关资源
        最近更新 更多