【发布时间】:2015-08-06 23:37:42
【问题描述】:
This article here 描述处理并发异常。重现问题的步骤是:
- 创建一个新的 Windows 应用程序项目。
- 基于 Northwind 客户表创建一个新数据集。
- 使用 DataGridView 创建一个表单来显示数据。
- 使用 Northwind 数据库中客户表中的数据填充数据集。
- 填充数据集后,使用 Visual Studio 中的 Visual Database Tools 直接访问 Customers 数据表并更改记录。
- 然后在表单上,将同一记录更改为不同的值,更新数据集,并尝试将更改写入数据库,这会导致引发并发错误。
- 捕捉错误,然后显示不同版本的记录,让用户决定是继续更新数据库,还是取消更新。
我的问题是,为什么会发生这种情况?为什么我不能只保存和编辑 DataGridView 中的记录而不会导致任何错误?我正在使用 DataGridView 创建一个应用程序,我正面临这个问题。我需要一些方法来避免或解决此错误而不通知用户,因此他们在 DataGridView 中看到的任何内容都会完全按照您看到的方式保存。该错误的原因是什么?
【问题讨论】:
-
似乎只有在受影响的行数为零时才调用 DBConcurrencyException。我假设记录被删除或主键可以更新。
-
每当我编辑刚刚保存的行或编辑具有相同数据的两行之一(主键除外)时,都会发生这种情况。那么受影响的行数怎么可能为零呢?
-
为什么要忽略这种异常?
-
我不想忽略它。我想处理它,以便 DataGridView 始终以用户看到的方式保存表格。一种解决方案是彻底清除数据库,然后用来自 DGW 的数据填充它,但这不是矫枉过正吗?
-
最好的做法是捕获异常并从数据库中重新加载记录,这样用户就可以根据当前数据决定要做什么。
标签: c# vb.net winforms datagridview dataset