【发布时间】:2014-10-14 22:44:24
【问题描述】:
这个问题快把我逼疯了。
我正在尝试使用 MySQL 数据适配器更新数据集。此方法适用于我数据库中的其他表,它只是发生在此表中。下面是代码示例:
String query = "select * from accounts";
DataSet dataSet = new DataSet();
connection.Open();
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(query, (MySqlConnection)connection);
MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(dataAdapter);
dataAdapter.FillSchema(dataSet, SchemaType.Source);
commandBuilder.RefreshSchema();
dataAdapter.Fill(dataSet);
dataSet.Tables[0].Rows[0]["balance"] = 1M;
dataAdapter.Update(dataSet);
一旦它尝试更新它就会抛出异常。请记住,这是我的代码的简化示例,但它得到了相同的结果。
我已经研究了这个错误,我只能找到:
1) 如果此数据自填充后已被其他用户更改
2)如果该行不存在。
但是其他用户不可能更改数据,因为这发生在我的开发机器上。该行显然存在,因为它不会在 Rows[0] 处引发异常。
正如我所说,这只发生在这张桌子上。该表有一个 int 作为主键,而我要更新的列是一个 Decimal,所以我不知道问题出在哪里。
感谢您的建议。
【问题讨论】:
-
在代码中看不到任何内容。我认为不是你的问题,但我应该指出行不存在时。这意味着在表中,即认为更新语句对应于不存在的行。你确定你的钥匙在桌子上没有问题吗?您得到此信息的另一个原因是如果无法唯一标识该行。即 select * from Table Where ID =1 返回除 1 行之外的任何内容。不太可能,但我已经看到它发生了,出于某种原因
-
不确定这是否会有所帮助,但几年前我遇到了类似的问题,使用不同的数据库。 IIRC 这是某种映射问题,其中日期存储为数字或类似的。当该行被发送回数据库时,数据库发现值不一样并抱怨数据已更改(即使没有更改)。也许您可以查看 DataSet 的定义并与 DB 进行比较?不确定。