Devart.Data.MySql:并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条
Posted
技术标签:
【中文标题】Devart.Data.MySql:并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条【英文标题】:Devart.Data.MySql: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records 【发布时间】:2016-03-07 13:12:32 【问题描述】:我使用 C# 和 Devart.Data.mysql 来更新数据库表中的行。但我有例外
并发冲突:UpdateCommand 影响了预期的 1 中的 0 记录
在尝试使用相同值更新行时。例如,我有两列 Id(主键)和 Title 的表数据。我在这张表中有一行 Id = 222, Title = 4444。然后我尝试用相同的值更新这一行:
using (var conn = new MySqlConnection(Cs))
conn.Open();
//update command
var uc = new MySqlCommand(@"UPDATE data SET Title = @Title WHERE Id = @Id", conn);
uc.Parameters.Add("@Title", MySqlType.VarChar, 50, "Title");
uc.Parameters.Add("@Id", MySqlType.VarChar, 50, "Id");
//create adapter
var adapter = new MySqlDataAdapter("", conn)
UpdateBatchSize = 100,
UpdateCommand = uc
;
adapter.TableMappings.Add("Table", "data");
//create table
var table = new DataTable("data");
DataColumn col = table.Columns.Add("Id", typeof(string));
col.Unique = true;
table.PrimaryKey = new[] col ;
table.Columns.Add("Title", typeof(string));
//create dataset
var ds = new DataSet();
ds.Tables.Add(table);
DataRow row = table.NewRow();
row["Id"] = "222";
row["Title"] = "4444";
table.Rows.Add(row);
row.AcceptChanges();
row.SetModified();
adapter.Update(ds);
在那之后,我在这里遇到了关于并发冲突的异常。如果我为 Title 使用另一个值,它可以正常工作。看起来没有一些时间戳或修改值我无法使用相同的值执行更新命令。为什么?
【问题讨论】:
【参考方案1】:看起来这种行为是设计使然,可以通过提供以下选项来更改连接字符串:
Found Rows=true;
此选项是在版本 7.0.25 中引入的,如 here 所示。
【讨论】:
以上是关于Devart.Data.MySql:并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条的主要内容,如果未能解决你的问题,请参考以下文章
JMeter之Ramp-up Period(in seconds)说明(可同时并发)
JMeter之Ramp-up Period(in seconds)说明(可同时并发)