如何将 OracleAdapter 数据集转换为 SQL BulkCopy
How Transform OracleAdapter Dataset to SQL BulkCopy
我已经成功地使用 Oracle.ManagedDataAccess.Client
从 Oracle 服务器获取数据到 Dataset
,并使用 SqlBulkCopy
将 Dataset
插入到 SQL 数据库,其中 table 具有匹配的列名称(见下文)。
我将如何操作 Dataset
的 Insert
以便我可以指定 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()
看来我可以使用 BulkCopy
的 ColumnMappings
功能来解决我的问题。由@AnandPhadke 从 post 找到:
insert data into table from a dataset
他们链接了这个:https://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
这允许我指定源列的名称及其目标。
例如bulkCopy.ColumnMappings.Add("column1", "columnn4")
我已经成功地使用 Oracle.ManagedDataAccess.Client
从 Oracle 服务器获取数据到 Dataset
,并使用 SqlBulkCopy
将 Dataset
插入到 SQL 数据库,其中 table 具有匹配的列名称(见下文)。
我将如何操作 Dataset
的 Insert
以便我可以指定 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()
看来我可以使用 BulkCopy
的 ColumnMappings
功能来解决我的问题。由@AnandPhadke 从 post 找到:
insert data into table from a dataset
他们链接了这个:https://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
这允许我指定源列的名称及其目标。
例如bulkCopy.ColumnMappings.Add("column1", "columnn4")