Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 合并两个数据表的最佳方法_Vb.net_Datatable - Fatal编程技术网

Vb.net 合并两个数据表的最佳方法

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

我需要用条件标记两个数据表。我有一个数据表,其中数据来自本地XML数据库,另一个数据表,其中数据来自远程SQL Server

如果在远程数据表中进行任何更新,我需要更新/合并本地数据表。以下是我到目前为止的情况:

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)列的存在