OLEDBCommand Builder 和跨表移动数据

Posted

技术标签:

【中文标题】OLEDBCommand Builder 和跨表移动数据【英文标题】:OLEDBCommandBuilder and moving data accross tables 【发布时间】:2010-05-02 21:02:57 【问题描述】:

所以,就这样吧:

我需要从 Access 数据库的表中复制数据,从另一个 Access 数据库的另一个表中复制数据。

表中的列名相同,只是 FROM 表有 5 列,而 TO 表有 6 列。

这是我的代码:

dsFrom.Clear()
dsTO.Clear()
daFrom = Nothing
daTO = Nothing
conn_string1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="etc.mdb;"
conn_string2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="database.mdb;"
query1 = "Select * from nomenclator_produse"
query2 = "Select * from nomenclator_produse"
Conn1 = New OleDbConnection(conn_string1)
conn2 = New OleDbConnection(conn_string2)
Conn1.Open()
conn2.Open()
daFrom = New OleDbDataAdapter(query1, Conn1)
daTO = New OleDbDataAdapter(query2, conn2)
daFrom.AcceptChangesDuringFill = False
dsFrom.HasChanges()
daFrom.Fill(dsFrom, "nomenclator_Produse")
dsFrom.HasChanges()
Dim cb = New OleDbCommandBuilder(daFrom)
dsTO = dsFrom.Copy
daTO.UpdateCommand = cb.GetUpdateCommand
daTO.InsertCommand = cb.GetInsertCommand
daTO.Update(dsTO, "nomenclator_produse")

因为 FROM 表有 5 行,另一个有 6 行,所以我尝试使用第一个表的 DataAdapter 生成的 InsertCommand。

它有效,只是它将来自 FROMTABLE 的数据插入到同一个 FROMTABLE 中,而不是 TOTABLE。

【问题讨论】:

【参考方案1】:

我认为您应该执行以下查询:

    conn_string2 = ";Database=c:\Docs\DBFrom.mdb;"
    query1 = "INSERT INTO nomenclator_produse (field1) " _
    & "SELECT f.Field1 from [" & conn_string2 & "].nomenclator_produse f " _
    & "LEFT JOIN nomenclator_produse t " _
    & "ON f.id=t.id WHERE t.id Is Null"

【讨论】:

以上是关于OLEDBCommand Builder 和跨表移动数据的主要内容,如果未能解决你的问题,请参考以下文章

OleDbCommand 不能执行这个命令,为啥?

OleDbCommand 的用法

AUTOINCREMENT 不适用于 OleDbCommand

在 OleDbCommand 的插入语句中指定函数

在参数化的 OleDbCommand 中使用 DateTime 的异常

OleDbCommand 在有效的命令文本上抛出异常