Проблема с триггерами удаления — SQL Server 2005

#.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. Большое спасибо! Теперь я понимаю, что на самом деле происходит с операцией удаления.