如何检查数据表是否没有被更改?

Tho*_*ton 1 .net vb.net datatable

我有一个数据表,并且正在实现一项功能,该功能可以告诉应用程序中的数据表自从数据库加载以来是否未曾更改。

例如,没有添加行,没有编辑行,没有删除行,因为它是从数据库加载的(我不关心数据库中数据更改且未反映在我的数据表中的情况)

我实现了这样的事情:

    'DataTable clean means it has not been changed
    Public ReadOnly Property DataTableClean As Boolean
        Get
            Dim Clean As Boolean = True
            For i = 0 To DataTable.Rows.Count - 1
                If DataTable.Rows(i).RowState <> DataRowState.Unchanged Then
                    Clean = False
                    Exit For
                End If
            Next
            Return Clean
        End Get
    End Property
Run Code Online (Sandbox Code Playgroud)

这段代码完成了这项工作,但如果数据表包含大量行,我对性能不太满意。

有谁知道是否有一个标志表明数据表是否已更改?

谢谢。

Ste*_*eve 5

我知道避免昂贵的循环并跟踪数据表更改的唯一方法(即使在调用 AcceptChanges 的情况下)是为RowChanged和 RowDeleted 事件设置事件处理程序。
当您收到这些事件时,您可以设置一个类级别布尔变量来保持 Clean 状态。

Private Boolean Clean = True
Public Sub AddChangedTrackStatus(dt as DataTable)
    AddHandler dt.RowChanged, AddressOf ChangeEvent
    AddHandler dt.RowDeleted, AddressOf ChangeEvent
    Clean = True
End Sub

Private Sub ChangeEvent(sender as Object, args as DataRowChangeEventArgs)
    Clean = False
End Sub

Public ReadOnly Property DataTableClean As Boolean
    Get
       Return Clean
    End Get
End Property
Run Code Online (Sandbox Code Playgroud)

但这仍然存在问题,因为这里我们一次跟踪一个表,如果您想要一个通用解决方案一次跟踪多个表,那么您需要在此类中添加某种集合管理(私有列表、添加/删除)。并且不要忘记在更新数据库时重置 Clean 变量。