#.net #sql-server #ado.net #triggers #dataset
#.net #sql-сервер #ado.net #триггеры #набор данных #sql-server
Вопрос:
У меня есть два поля, LastModifiedBy и DateLastModified в таблице SQL. Используя ADO.net , Я изменяю эти поля и вызываю функцию AcceptChanges, чтобы зафиксировать эти изменения в наборе данных (не в базе данных). Затем я вызываю функцию удаления в потоке данных. Затем я вызываю функцию обновления на адаптере. Технически, поток данных теперь содержит значения в двух упомянутых выше полях, и они привязаны к набору данных, но триггер удаления SQL Server по-прежнему показывает, что значения в этих полях равны нулю. Как это может быть?
С уважением, Сантош
Ответ №1:
Из-за нескольких проблем:
- Вы изменяете поля, а затем вызываете
AcceptChanges
= datasets, думая, что эти данные были сохранены в базе данных, но это не так! - Вы удаляете строку, но удаление не приводит к передаче изменений в базу данных. Он просто вызывает delete для текущего состояния строки в базе данных.
Итак, вы должны разделить операцию на два этапа:
- Измените поля и внесите изменения в базу данных — она запишет поля в запись
- Удалите строку и внесите изменения в базу данных — это приведет к удалению записи с уже переданными полями
Сделайте это в одной транзакции.
Комментарии:
1. Большое спасибо! Теперь я понимаю, что на самом деле происходит с операцией удаления.