Vb.net 合并两个数据表的最佳方法
我需要用条件标记两个数据表。我有一个数据表,其中数据来自本地XML数据库,另一个数据表,其中数据来自远程SQL Server 如果在远程数据表中进行任何更新,我需要更新/合并本地数据表。以下是我到目前为止的情况:Vb.net 合并两个数据表的最佳方法,vb.net,datatable,Vb.net,Datatable,我需要用条件标记两个数据表。我有一个数据表,其中数据来自本地XML数据库,另一个数据表,其中数据来自远程SQL Server 如果在远程数据表中进行任何更新,我需要更新/合并本地数据表。以下是我到目前为止的情况: Public Sub MargeTwoTable() Dim SQL As String = "" Dim RemoteTable As New DataTable Dim LocalTable As DataTable Dim dal As New
Public Sub MargeTwoTable()
Dim SQL As String = ""
Dim RemoteTable As New DataTable
Dim LocalTable As DataTable
Dim dal As New DalComon
Dim yy As Integer = 0
Dim UpdateDate As String
Dim TableName As String = "V_Book_Price"
LocalTable = LoadDataTable(TableName, True)
UpdateDate = LocalTable.Compute("MAX(update_date)", Nothing)
SQL = "select * from V_Book_Price where Update_Date > '" & UpdateDate & "'"
RemoteTable = dal.GetDataSetBySQL(SQL).Tables(0)
If RemoteTable.Rows.Count > 0 Then
For i = 0 To RemoteTable.Rows.Count - 1
Dim st As DataRow
Dim mm() As DataRow = LocalTable.Select("ID = '" & RemoteTable.Rows(i).Item("ID") & "'")
If mm.Length = 0 Then
st = LocalTable.NewRow
For yy = 0 To RemoteTable.Columns.Count - 1
st(yy) = RemoteTable.Rows(i)(yy)
Next
LocalTable.Rows.Add(st)
Else
st = mm(0)
For yy = 0 To RemoteTable.Columns.Count - 1
If IsDate(RemoteTable.Rows(i)(yy)) Then
st(yy) = CDate(RemoteTable.Rows(i)(yy)).ToString("s")
Else
st(yy) = RemoteTable.Rows(i)(yy)
End If
Next
mm = Nothing
End If
Next
End If
End Sub
在这段代码中,数据来自远程数据库,该数据库更新日期获取程序,然后更新本地数据库。两个表都以“ID”作为主键。代码运行良好,但问题是当更新1000条以上的记录时,使用循环会花费太长时间 不确定是否适用,但您是否看过 方法?
它似乎是一个很好的候选者,可以替代上面的所有代码 您的代码可以简化为以下几行
Dim row as DataRow
For Each row in RemoteTable.Rows
LocalTable.LoadDataRow(row.ItemArray, false)
Next
另一种选择可能是将代码缩减为一行
LocalTable.Merge(RemoteTable, False)
然而,这两种方法的真正有效性取决于模式兼容性和自动编号(identity)列的存在。不确定是否适用,但您是否看过 方法?
它似乎是一个很好的候选者,可以替代上面的所有代码 您的代码可以简化为以下几行
Dim row as DataRow
For Each row in RemoteTable.Rows
LocalTable.LoadDataRow(row.ItemArray, false)
Next
另一种选择可能是将代码缩减为一行
LocalTable.Merge(RemoteTable, False)
然而,这两种方法的真正有效性取决于模式兼容性和自动编号(identity)列的存在