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

时间:2017-06-19 08:34:13

标签: vb.net oracle dataset sqlbulkcopy oracle-manageddataaccess

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

我将如何操纵Insert Dataset,以便我可以指定Dataset中的列进入SQL表的位置,允许我使用不相同的表?

E.g。 SourceTable(column1)插入DestinationTable(column4)

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

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()

1 个答案:

答案 0 :(得分:0)

看起来我可以使用ColumnMappings的{​​{1}}功能来解决我的问题。由@AnandPhadke发现帖子: insert data into table from a dataset

他们将此链接起来:https://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

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

E.g。 BulkCopy