2つのデータテーブルを条件付きでマージする必要があります。データがローカルXMLデータベースからのものであるデータテーブルと、データがリモートSQLServerからのものである別のデータテーブルがあります。
リモートデータテーブルで更新が行われた場合は、ローカルデータテーブルで更新/マージする必要があります。これが私がこれまでに持っているものです:
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を超えるレコードが更新されると、ループを使用するとこの関数に時間がかかりすぎることです。