如何在.NET中使用DataTables解决并发冲突?

时间:2011-06-24 22:15:25

标签: .net database concurrency

我在VB.NET 2.0中使用DataTables,我正在编写代码来处理我期望在多用户环境中发生的并发冲突。我理解如何捕获并发冲突,但我不明白如何在使用DbCommandBuilder生成的INSERT,UPDATE和DELETE命令时解决它们。

在我看来,并发违规发生在五种不同的情况下:

当...

  1. 更新已在数据库中同时更新的行
  2. 更新已从数据库中同时删除的行
  3. 删除已在数据库中同时更新的行
  4. 删除已从数据库中同时删除的行
  5. 插入主键已同时插入数据库的行
  6. 我知道如何解决问题1;我找到了几个如何使用DataTable.Merge方法同步更新行的示例。但是,Merge似乎不适用于其他4种情况。

    例如,假设我正在尝试更新已从数据库同时删除的行(情况2),并且我的业务规则告诉我使用更新的列值将行还原到数据库中。我无法弄清楚如何更改DataRow属性,以便Adapter.Update方法将行根据需要插入数据库;合并不会这样做。

    考虑到Merge处理情况1的难易程度,我确信必须对其他并发冲突进行简单的解决,我只是忽略了它们。任何人都可以向我提供正确的方向吗?

    -TC

1 个答案:

答案 0 :(得分:0)

如果您尝试更新的行被另一个进程删除,并且您需要将其还原,那么您需要捕获当您尝试通过将该行插回数据库进行更新和响应时发生的并发异常:

  1. 保存更新的值。
  2. 将并发冲突合并到您的表中,这将删除在数据库中删除的行。
  3. 使用保存的值在表格中插入新行。
  4. 保存表格。