问题描述
|
我正在VB.NET 2.0中使用DataTables,并且正在编写代码来处理预期在多用户环境中发生的并发冲突。我了解如何捕获并发冲突,但是我不了解如何在使用DbCommandBuilder生成的INSERT,UPDATE和DELETE命令时解决它们。
在我看来,并发冲突发生在五种不同的情况下:
什么时候...
更新数据库中已同时更新的行
更新已从数据库中同时删除的行
删除数据库中已同时更新的行
删除已从数据库中同时删除的行
插入主键已同时插入数据库的行
我知道如何解决情况1;我已经找到了几个有关如何使用DataTable.Merge方法同步更新的行的示例。但是,合并似乎不适用于其他4种情况。
例如,假设我正在尝试更新已从数据库中同时删除的行(情况2),并且我的业务规则告诉我使用更新的列值将该行还原到数据库中。我无法弄清楚如何更改DaTarow属性,以便Adapter.Update方法将按需将行插入数据库中。合并不执行。
鉴于Merge处理情况1的便捷性,我确定对于其他并发冲突也必须有简单的解决方案,而我只是忽略了它们。谁能向我提供正确方向的推动力?
-TC
解决方法
如果您尝试更新的行被另一个进程删除,并且您需要还原它,那么您需要捕获并发异常,该并发异常是在尝试通过将行重新插入数据库来进行更新和响应时发生的:
保存更新的值。
将并发冲突合并到您的表中,这将删除数据库中已删除的行。
将具有已保存值的新行插入表中。
保存表。