在离开.Net类型的数据集很长一段时间后,我不得不从事一个遗留项目,我已经违反了
Error: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records
当尝试按ID加载单个记录,然后更新该记录中的单个字段时。
我首先排除了另一个系统或用户绝对不可能更新导致问题的代码"下面"的记录的可能性。
然后我排除了数据类型和舍入不是问题的原因,因为我知道不同系统处理浮点舍入的细微差异可能会导致报告的错误消息。
然后,我排除了"可为null"字段不会引起问题的可能性。
事实证明,这是我自己在存储过程中犯的一个错误。虽然它似乎返回了我加载类型化数据集所需的所有数据,但我没有包括主键字段,所以当我遍历代码时,主字段的值为"-1"。
我认为这会导致数据适配器出现一些问题。我很惊讶这个错误表现为并发问题。如果尝试在没有密钥的情况下更新记录,我本希望收到一条信息更丰富的消息!
更正我的"select for ID"存储过程以返回ID字段以及所有更感兴趣的字段,解决了在适配器上调用Update
方法时的问题。