并发冲突:UpdateCommand影响了预期的1条记录中的0条。 DB concurrencyException未处理

时间:2010-11-29 18:06:41

标签: c# sql-server dataadapter sqlcommandbuilder

我已经定义了2个数据集和2个dataAdapter(每个数据集一个)。在创建之后,对于2个dataAdapters中的每一个,我定义了一个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);

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

1 个答案:

答案 0 :(得分:12)

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

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

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

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

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