Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей.Исключение параллелизма БД было обработано - PullRequest
0 голосов
/ 29 ноября 2010

Я определил 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);

Есть идеи, почему это происходит?

1 Ответ

12 голосов
/ 29 ноября 2010

Ваша информация предоставлена ​​бесполезно.Но я могу объяснить значение ошибки.

Каждая команда обновления, написанная в ADO.Net, имеет вид:

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

ADO.Net сохраняет значение столбца, когда оно быловыбран из базы данных.Когда он выполняет обновление, условие заключается в том, что ни один из столбцов не был изменен при фиксации.

Причина, по которой вы видите ошибку, заключается в том, что строка между базами данных изменилась между вами, выполняющим выбор и вызов da2.UpdateChanges(ds2).Если вы посмотрите на логику, возможно, вы выбрали значение для строки в двух отдельных наборах данных (или в двух разных потоках) и выполнили обновление для него после выполнения выбора.

...