Нарушение параллелизма появляется, когда я добавляю строки и обновляю строки в определенной ситуации - PullRequest
2 голосов
/ 08 мая 2019

Моя настройка проста,

  • DataGridView, связанный с BindingSource
  • BindingSource связан с DataTable
  • DataTable заполняется простым adapter.Fill(table);

Теперь это работает хорошо, но с сегодняшнего дня я получаю эту ошибку в определенной ситуации.

Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записи.

Я могу воспроизвести его следующим

  1. Добавить новую строку в DataGridView
  2. Сохранить в базе данных, используя adapter.Update(Table);
  3. добавить еще один ряд
  4. изменить значение любого столбца в обеих строках
  5. попробуйте сохранить снова, используя adapter.Update(Table);

Теперь ошибка возникает.
Я перехватил фактическое утверждение, отправленное на Sql Server с помощью профилировщика, и утверждение таково:

exec sp_executesql 
N'UPDATE [tblDamageRegion] SET [Remarks] = @Remarks WHERE (([DamageRegionID] = @Original_DamageRegionID))',
N'@Remarks nvarchar(1),@Original_DamageRegionID int',
@Remarks=N'1',@Original_DamageRegionID=NULL

Как видите, переменная @Original_DamageRegionID равна NULL
Это приводит к тому, что строки не обновляются, и поэтому появляется указанная выше ошибка.

У меня вопрос, как это возможно, что адаптер не заполняет эту переменную?

Я пробовал table.AcceptChanges(); после каждого adapter.Update(Table);, но это не помогло
Я пытался BindingSource.EndEdit(); до adapter.Update(Table);, но это не помогло

...