Как обновить две разные таблицы с помощью команды обновления DetailsView - PullRequest
1 голос
/ 26 сентября 2011

Я занимаюсь разработкой приложения ASP.NET на C #.

У меня есть две таблицы базы данных Food (Id, Name, Description) и FoodLog (Id, FoodId, FoodName, FoodDescription, ChangedFields, Date) . Как видно из названия, FoodLog сохраняет историю изменений, сделанных пользователями, в Food записях и указывает в поле ChangedFields , какие поля были изменены по сравнению с предыдущими «версия» записи.

Для отображения пользователю определенной записи Food я использую элемент управления DetailsView . Когда пользователь нажимает кнопку Update , выполняется UpdateCommand , связанная с SQLDataSource . UpdateCommand просто изменяет соответствующую запись Food.

Чтобы добавить новую запись в таблицу FoodLog , мне нужно перехватить событие, запускаемое DetailsView при обновлении. Когда я ловлю это событие, я вручную сравниваю запись, вставленную пользователем (еще не зафиксированную в БД), с записью в таблице Food , соответствующей ее Id, чтобы отслеживать измененные поля и сохранять их в поле ChangeFields в таблице FoodLog. Теперь для выполнения этой задачи я могу использовать два события, сгенерированные DetailsView

  • ItemUpdated : запускается после выполнения UpdateCommand . это как я теряю отслеживание измененных полей, потому что предыдущий «версия» записи уже перезаписана.

  • ItemUpdating : запускается до выполнения UpdateCommand . Таким образом, у меня все еще есть старая «версия» записи в БД, и я Можно сделать сравнение, а затем dtore в таблице FoodLog. тем не мение если тогда UpdateCommand не удается по какой-то причине у меня есть запись в журнал, который не соответствует изменению в таблице Food.

Кто-нибудь может помочь с этой проблемой? Можно ли написать два разных выражения SQL в UpdateCommand ?

Спасибо

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вы можете использовать хранимую процедуру для своих обновлений.

Сначала вызовите хранимую процедуру, когда сохраните старые значения в таблице журнала, а затем обновите основную таблицу.Используйте транзакцию, чтобы избежать частичного обновления в случае ошибки.

0 голосов
/ 10 сентября 2014

Если бы вы могли просто сильный текст , используйте sp для генерации обновления и слияния и используйте только событие .NET.Если бы вы могли просто использовать sp для генерации обновления и слияния и использовать только событие .NET, вызывающее sp

...