2

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

桌子

我有两个包含多个(相同)字段的表,其中主键是一个名为 "Number" 的字段;此字段是自动增量的,并且在两个表中都没有重复索引。所以我读到缺少主键是并发违规的根源,但这似乎不是这里的问题。

编码

这是我的代码的相关部分,汇总在一起:

初始化

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

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

4

2 回答 2

0

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

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

你检查过这些可能性吗?

于 2012-09-04T11:19:42.980 回答
0

所以我改变了企业类来使用 OleDb 而不是 Odbc,就像一个魅力!DataGridView除了OdbcCommand变得OleDbCommandOdbcDataAdapter变得之外,关于 的代码保持完全相同OleDbDataAdapter

于 2012-09-05T07:59:04.237 回答