如何将 OracleAdapter 数据集转换为 SQL BulkCopy

How Transform OracleAdapter Dataset to SQL BulkCopy

我已经成功地使用 Oracle.ManagedDataAccess.Client 从 Oracle 服务器获取数据到 Dataset,并使用 SqlBulkCopyDataset 插入到 SQL 数据库,其中 table 具有匹配的列名称(见下文)。

我将如何操作 DatasetInsert 以便我可以指定 Dataset 中的列进入 SQL [=41] 的位置=],允许我使用不同的 tables?

例如SourceTable(column1) 插入到 DestinationTable(column4)

我认为这可以通过 SQL 插入语句来实现,例如:

INSERT INTO DestinationTable ([column4]) Values ([column1])

但我不知道如何将 Dataset 操纵到我的 SQL 语句中。我的代码 到目前为止:

    Dim i As Double = 1
    Dim j As Double = 5000

    Dim Oconn As New OracleConnection(connectionString & mySource)

    Oconn.Open()

    Dim Osqlstr As String = "Select column1, " _
                                & "column2, " _
                                & "column3, " _
                                & "column4, " _
                                & "from " _
                                & "(Select rownum r, " _
                                & "column1, " _
                                & "column2, " _
                                & "column3, " _
                                & "column4, " _
                                & "from mysourcetable)" _
                                & "where rownum >=" & i & " and rownum <=" & j _
                                & " order by column1 asc"

    Dim Ocommand As New OracleCommand(Osqlstr, Oconn)
    Dim Oda As New OracleDataAdapter(Ocommand)
    Dim Ods As New DataSet()

    Oda.Fill(Ods)

    Using myBulk As New SqlBulkCopy(DB_COMMS)

        myBulk.DestinationTableName = "mydestinationtable"
        Try
            myBulk.WriteToServer(Ods.Tables(0))
        Catch ex As Exception
            MsgBox("Error:- " & ex.Message)
        End Try

    End Using

    Ods.Dispose()

    Oconn.Close()

看来我可以使用 BulkCopyColumnMappings 功能来解决我的问题。由@AnandPhadke 从 post 找到: insert data into table from a dataset

他们链接了这个:https://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

这允许我指定源列的名称及其目标。

例如bulkCopy.ColumnMappings.Add("column1", "columnn4")