.net 比较行之间的数据表值以进行更改检测

.net 比较行之间的数据表值以进行更改检测,.net,vb.net,datatable,.net,Vb.net,Datatable,我的目标是在我们将行更新到数据库之前检测并写入值已更改的信息 例如,我有两个列结构相同的数据表:beforeEdit和afterEdit。在本例中,每个数据表只有一行 For i As Integer = 0 To beforeEdit.Columns.Count - 1 If beforeEdit(0).Item(i) <> afterEdit(0).Item(i) Then 'storing log which column have changed

我的目标是在我们将行更新到数据库之前检测并写入值已更改的信息

例如,我有两个列结构相同的数据表:
beforeEdit
afterEdit
。在本例中,每个数据表只有一行

For i As Integer = 0 To beforeEdit.Columns.Count - 1
    If beforeEdit(0).Item(i) <> afterEdit(0).Item(i) Then
        'storing log which column have changed
    End If
Next
对于i As Integer=0到beforeEdit.Columns.Count-1
如果在编辑之前(0).项目(i)在编辑之后(0).项目(i),则
'存储已更改的列的日志
如果结束
下一个
有没有更好的方法来完成这项任务


提前感谢

您不需要两个
数据表
。每个
DataRow
已经维护了数据的两个副本。
DataRow
RowState
属性可以告诉您它是否已更改。如果未发生任何更改,则将保持
不变
,否则将进行
修改。您可以使用这样的代码来确定
数据行中是否发生了更改以及发生了哪些更改:

Private Sub LogRecordChanges(row As DataRow)
    If row.RowState = DataRowState.Unchanged Then
        Console.WriteLine("No changes to row.")
    Else
        For Each column As DataColumn In row.Table.Columns
            Dim currentValue = row(column, DataRowVersion.Current)
            Dim originalValue = row(column, DataRowVersion.Original)

            If currentValue.Equals(originalValue) Then
                Console.WriteLine($"No changes to column '{column.ColumnName}'.")
            Else
                Console.WriteLine($"Column '{column.ColumnName}' changed from '{originalValue}' to '{currentValue}'.")
            End If
        Next
    End If
End Sub