C# - 从DataGridView更新MS Access表时的并发访问冲突

时间:2012-08-07 12:54:03

标签: c# ms-access datagridview

我在从DataGridView更新Access表时遇到了一些麻烦。 令我困惑的是,代码beblow适用于一个表而不适用于另一个表,但它们都具有完全相同的结构。

表格

我有两个包含多个(相同)字段的表,其中主键是一个名为“Number”的字段;这个字段是Autoincrement,并且在两个表中都没有重复索引。 所以我读到缺少主键作为并发冲突的起源,但这似乎不是问题。

代码

以下是我的代码的相关部分,聚集在一起:

初始化

BindingSource BS = new BindingSource();
DbDataAdapter adapter;
DataTable table = new DataTable();
OdbcCommand command = new OdbcCommand(query, odbcConnection);
OdbcDataAdapter adapter = new OdbcDataAdapter(command);
adapter.AcceptChangesDuringUpdate = true; // Attempt to fix the issue
adapter.AcceptChangesDuringFill = true; // same
DbCommandBuilder commandBuilder = new OdbcCommandBuilder(adapter);
dgv.DataSource = BS;
BS.DataSource = table;
adapter.Fill(table);

保存更改

OdbcCommandBuilder builder = new OdbcCommandBuilder((OdbcDataAdapter)adapter);
adapter.UpdateCommand = builder.GetUpdateCommand(); // Fix attempt
adapter.Update(table); // Where the exception is thrown

考虑到我的问题根据所使用的数据库而发生,我认为它与数据库有关,但它们具有相同的结构,并且两者都没有使用(复制在我的本地驱动器上)所以我真的没有线索发生了什么事。

2 个答案:

答案 0 :(得分:0)

可能存在与其他表定义的关系,这可能会阻止更新某个字段。

此外,表格可能包含用于检查数据有效性的索引或表达式,这会阻止更新表格。

你检查过这些可能性吗?

答案 1 :(得分:0)

所以我改变了公司类使用OleDb而不是Odbc,就像一个魅力! 代码与DataGridView完全相同,但OdbcCommand变为OleDbCommandOdbcDataAdapter变为OleDbDataAdapter