mysql - 在 Ado.Net 更新中事务为 "Concurrency violation"

标签 mysql concurrency transactions ado.net

我使用 MySQL 5.5、C#、ADO.NET、DataSet 进行写作。 我有一个 DataSet 和 DataAdapter 填充它。在 DataAdapter 中,我重写 INSERT、UPDATE、DELETE 命令。当我使用存储过程(如这些命令)时,一切都很好。 但是,当我在此存储过程中使用 transactionns 时,出现异常:

Concurrency violation: the DeleteCommand affected 0 of the expected 1 records.

对于这个错误我该怎么办?

示例:http://dl.dropbox.com/u/46828938/DataGridSample.zip

要重现该问题:从数据网格中删除行并按“更新”按钮。

DBConcurrencyException ("Concurrency violation: the DeleteCommand affected 0 of the expected 1 records.") reproduce on:"productDataAdapter.Update(dataSet, "Products");" string.

最佳答案

我学习了很多关于这个问题的文档(msdn、mysql 论坛、stackoverflow 等)并查看:

检查实际并发性或无法执行其他查询:

  1. 插入:获取最后插入的行并与插入的行进行比较。
  2. 更新:获取更新的行(例如通过键)并与更新的行进行比较。
  3. 删除:尝试获取行(例如通过键)并获取 null。

当然,所有上述比较都需要在一个逻辑槽/连接等中进行。 不幸的是,不存在其他方式检查“MySql 上是否存在并发冲突”。(与其他数据库服务器不同)。

我希望这些信息对某人有所帮助。

关于mysql - 在 Ado.Net 更新中事务为 "Concurrency violation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359976/

相关文章:

mysql - myisam 表类型真的更适合日志表(mysql)吗?

java - 在 Java 中比较输入数据和 Sql 表的有效方法

concurrency - cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 有什么区别?

java - 如何使用 objectify 确保 Appengine 实体上的并发请求的一致性?

c# - TransactionScope 如何回滚事务?

java - JPA事务隔离和实体锁的区别

php - 如果多个准备好的语句之一失败,则停止并恢复

mysql - 嵌套 SQL 语句未按预期计算 SUM

PHP MySQL并发,数据库中的最大项目数有限

java - Hibernate和Spring3事务管理注解-配置问题: Hibernate-Exception: No Hibernate Session bound to thread