我正在用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表达式由于
答案 0 :(得分:1)
您可以使用存储过程进行更新。
将旧值存储在日志表中时,首先调用存储过程,然后更新主表。如果出现错误,请使用事务来避免部分更新。
答案 1 :(得分:0)
如果您可以强文,请使用sp生成更新和合并,并仅使用事件.NET。如果你可以使用sp来生成更新和合并,并且只使用.NET调用sp
的事件