使用RowChanged或其他事件在ADO.Net DataTable中创建触发器

时间:2017-04-17 11:35:36

标签: .net events datatable ado.net

我想在 DataTable 中模拟触发器,以便在发生某些数据更改时更新我的​​ DataSet 。 为此,我打算利用 DataTable 事件,但后来我发现了Microsoft Handling DataTable Events发出的警告:

  

如果在引发 RowChanged 事件的 DataSet 中修改了数据,则可能会发生数据损坏。如果发生此类数据损坏,则不会引发任何异常。

所以,我认为将 RowChanged 事件用于我的任务是个坏主意。但是使用其他事件是否安全,例如 RowChanging ?或者可能有更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:0)

我认为MSDN正在指出这一点,因为潜在的验证规则可能存在,例如密钥和密钥。唯一约束,通常是数据集的实际模式定义的一部分。所以你只需记住这一点。

RowChanging事件比RowChanged事件更为通用。它告诉您,行中某处发生了更改,但您不知道哪个列已更改。

您选择的事件取决于您想要的粒度。 RowChanged和ColumnChanged 更精细的选项。

如果是 RowChanged

  

一行已更改。该事件将行传递给您,以及一个   指示什么类型的操作(更改,插入等)的值   被执行。

如果是 ColumnChanged

  

列中的值已更改。该事件传递了行和   列给你,以及建议的值。

另一种选择可能是DataTable.GetChanges Method

  

调用数据集或数据表的GetChanges方法会返回一个新方法   仅包含已记录的数据集或数据表   改变。如果您只想获取特定记录 - 例如,仅   新记录或仅修改记录 - 您可以传递一个值   DataRowState枚举作为GetChanges方法的参数。