【发布时间】:2012-01-15 10:49:34
【问题描述】:
尝试在我的数据库上使用 Update() 方法时会出现 DBConcurrencyException 问题。我在数据库中有一个表,它有一个自动递增的 ID 列,我的 c# 程序中有一个 DataTable 从这个表中获取它的信息(包括我使用 MissingSchemaAction = MissingSchemaAction.AddWithKey 时的自动递增部分)。
如果我创建行并将它们添加到数据表中,数据表会自动为我填充自动递增的 ID 列(从数据库表停止的位置开始),这很好。但是,如果我删除刚刚添加的行(不首先使用 Update() )并添加新行,则数据表自动增量列将根据 DATATABLE 的位置而不是数据库的位置填充一个值,这就是为什么我得到并发错误。
例如:
数据库中的表有这些记录:
1 Apple
2 Orange
3 Pear
它被复制到数据表中,所以当我添加一个名为“grape”的新行时,我得到:
1 Apple
2 Orange
3 Pear
4 Grape
这很好,但是如果不运行 Update() 方法,我会删除葡萄行并添加一个新行“Melon”,我会得到:
1 Apple
2 Orange
3 Pear
5 Melon
当我尝试运行 Update() 时,数据库期望 4 是下一个自动增量值,但实际上是 5。所以我得到了错误。当用户单击“保存”按钮时会发生 Update(),因此理想情况下,我希望他们能够在最终保存之前进行如上所示的大量更改,但这是保持并发性以使用 Update( ) 每行添加/删除后?
【问题讨论】:
-
一个MySQL数据库,抱歉我没提,Update()是DataAdapter的一个方法,用来从数据库中获取信息。
标签: c# mysql concurrency datatable auto-increment