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

Ale*_*lex 0 c# sql-server sqlcommandbuilder dataadapter

我已经定义了2个数据集和2个dataAdapters(每个数据集一个).在创建之后,对于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);
Run Code Online (Sandbox Code Playgroud)

第二个:

            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);
Run Code Online (Sandbox Code Playgroud)

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

Spe*_*nce 12

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

在ADO.Net中编写的每个更新命令都具有以下形式:

Update col1, col2 where col1=col1value AND col2=col2value
Run Code Online (Sandbox Code Playgroud)

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

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