【问题标题】:Creating a trigger in ADO.Net DataTable using RowChanged or other events使用 RowChanged 或其他事件在 ADO.Net DataTable 中创建触发器
【发布时间】:2017-04-17 11:35:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net events datatable ado.net


    【解决方案1】:

    我相信 MSDN 指出这一点是因为可能存在潜在的验证规则,例如键和唯一约束,它们通常是数据集实际架构定义的一部分。所以你只需要记住这一点。

    RowChanging 事件比RowChanged 事件更通用。它告诉您行中某处发生了变化,但您不知道哪一列发生了变化。

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

    RowChanged的情况下:

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

    ColumnChanged的情况下:

    列中的值已更改。事件通过行和 列给您,以及建议的值。

    另一个选项可能是DataTable.GetChanges Method

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

    【讨论】:

    • 感谢您的解释。如果可能发生的唯一数据损坏是打破某些约束,我可以处理它。无论如何,我可能会将我的代码移动到 ColumnChanged 事件。
    • @AlexVB 如果答案解决了您的问题,请将问题标记为已回答,以便其他人也可以从中受益。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多