【问题标题】:Concurrency violation: the UpdateCommand affected 0 of the expected 1 records. DB concurrencyException was unhandled并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条。 DB concurrencyException 未处理
【发布时间】:2011-05-17 10:29:25
【问题描述】:

我已经定义了 2 个数据集和 2 个数据适配器(每个数据集一个)。创建后,我为 2 个数据适配器中的每一个定义了一个 SqlCommandBuilder。到这里为止一切都很好。 我可以使用 dataAdapter1.Update(dataSet1) 从数据库中添加、修改、擦除非常好。但不是这个顺序:擦除、添加、修改。

这是第一个数据集、dataAdapter 和 sqlCommandBuilder 的代码:

                string sql = "SELECT * From localitati";
                da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
                da1.Fill(ds1, "localitati");
                cmdBuilder1 = new SqlCommandBuilder(da1);

第二个:

            sql = "SELECT * From sucursale";
            da2 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
            da2.Fill(ds2, "sucursale");
            //face automat select, insert ,etc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            cmdBuilder2 = new SqlCommandBuilder(da2);

任何想法为什么会发生这种情况?

【问题讨论】:

  • 代码不完整,没有对问题的真实描述。

标签: c# sql-server dataadapter sqlcommandbuilder


【解决方案1】:

您提供的信息毫无用处。但是我可以解释错误的含义。

用 ADO.Net 编写的每个更新命令的格式为:

Update col1, col2 where col1=col1value AND col2=col2value

ADO.Net 保留从数据库中选择列时的值。当它执行更新时,条件是您提交时没有任何列发生更改。

您看到错误的原因是在您执行选择和调用da2.UpdateChanges(ds2) 之间数据库行发生了变化。如果您查看逻辑,可能您已将行的值选择到两个单独的数据集中(或在两个不同的线程中)并在执行选择后对其执行更新。

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多