如何使用DetailsView Update Command更新两个不同的表

时间:2011-09-26 15:31:08

标签: detailsview

我正在用C#开发一个ASP.NET应用程序。

我有两个数据库表食物(Id,名称,描述) FoodLog(Id,FoodId,FoodName,FoodDescription,ChangedFields,Date)。如名称所示, FoodLog 将用户的修改历史记录存储到食品记录中,并在 ChangedFields 字段中指定哪些字段已被修改比较与之前的“版本”记录。

要向用户显示特定的食物记录,我使用 DetailsView 控件。当用户按下更新按钮时,会执行链接到 SQLDataSource UpdateCommand 。这个 UpdateCommand 只是修改相应的食物记录。

为了向 FoodLog 表添加新记录,我需要在更新时捕获 DetailsView 触发的事件。当我捕获此事件时,我手动将用户插入的记录(尚未提交给数据库)与 Food 表中与其ID匹配的记录进行比较,以便跟踪修改后的字段和存储它们位于FoodLog表的 ChangeFields 字段中。现在,为了执行此任务,我可以使用由 DetailsView

触发的两个事件
  • ItemUpdated :在 UpdateCommand 执行后启动。这个 我失去了修改字段的方法因为前一个 记录的“版本”已经被覆盖。

  • ItemUpdating :在 UpdateCommand 执行之前启动。 这样我在DB和I中仍然保留了记录的旧“版本” 可以进行比较,然后在FoodLog表中进行比较。然而 如果那时UpdateCommand由于某种原因失败我有一个记录 与食物表上的更改不对应的日志。

任何人都可以帮忙解决这个问题?是否可以在 UpdateCommand

中编写两个不同的SQL表达式

由于

2 个答案:

答案 0 :(得分:1)

您可以使用存储过程进行更新。

将旧值存储在日志表中时,首先调用存储过程,然后更新主表。如果出现错误,请使用事务来避免部分更新。

答案 1 :(得分:0)

如果您可以强文,请使用sp生成更新和合并,并仅使用事件.NET。如果你可以使用sp来生成更新和合并,并且只使用.NET调用sp

的事件