Моя настройка проста,
- DataGridView, связанный с BindingSource
- BindingSource связан с DataTable
- DataTable заполняется простым
adapter.Fill(table);
Теперь это работает хорошо, но с сегодняшнего дня я получаю эту ошибку в определенной ситуации.
Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1
записи.
Я могу воспроизвести его следующим
- Добавить новую строку в DataGridView
- Сохранить в базе данных, используя
adapter.Update(Table);
- добавить еще один ряд
- изменить значение любого столбца в обеих строках
- попробуйте сохранить снова, используя
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);
, но это не помогло