我在从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
考虑到我的问题根据所使用的数据库而发生,我认为它与数据库有关,但它们具有相同的结构,并且两者都没有使用(复制在我的本地驱动器上)所以我真的没有线索发生了什么事。
答案 0 :(得分:0)
可能存在与其他表定义的关系,这可能会阻止更新某个字段。
此外,表格可能包含用于检查数据有效性的索引或表达式,这会阻止更新表格。
你检查过这些可能性吗?
答案 1 :(得分:0)
所以我改变了公司类使用OleDb而不是Odbc,就像一个魅力!
代码与DataGridView
完全相同,但OdbcCommand
变为OleDbCommand
且OdbcDataAdapter
变为OleDbDataAdapter
。