解决问题:Concurrency violation: the UpdateCommand affected 0 of the expected 1 records(UpdateCommand 影响了预期1 条记录中的0 条 )

原因: 对具有自增列的表进行新增并多次保存,由于第一次保存(插入)后没有获得到自增列的值,再次保存(更新)时失败。

解决方法,在获取数据时增加FillSchema()操作:

adapter.FillSchema(ds,

SchemaType .Mapped); //new added

adapter.Fill(ds);

这样,在

adapter.Update(ds);

时就可以自动得到自增列的值;从而,不会保存失败了。

 

(自增列应为主键) 测试代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
这个错误通常是由于乐观并发性冲突引起的。乐观并发性是一种处理并发访问数据库的策略,它假定多个用户之间的冲突是罕见的,并且只在提交更改时检查数据是否已被其他用户修改。当一个用户试图提交更改时,如果该数据已被其他用户修改,则会引发乐观并发性异常。 在你的情况下,错误信息表明你预期影响一行数据,但实际上没有影响任何行。这可能是因为在你加载实体(数据)后,其他用户已经修改或删除了这些数据。 为了解决这个问题,你可以考虑以下几个步骤: 1. 确保你在修改数据之前重新加载了最新的数据。这可以通过重新查询数据库获取最新的数据,或者使用一些 ORM(对象关系映射)工具来自动管理数据加载。 2. 在提交更改之前,检查数据是否已被其他用户修改。可以通过比较你加载的数据与当前数据库的数据来实现。如果数据不匹配,可以选择放弃更改、重新加载最新数据或者手动解决冲突。 3. 如果你的应用程序经常出现乐观并发性异常,你可能需要重新评估你的并发控制策略。你可以考虑使用悲观并发性控制策略,这意味着在修改数据之前,先锁定数据以防止其他用户对其进行修改。这样可以避免冲突,但可能会对性能产生一定的影响。 希望这些建议能帮助你解决问题!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值