如何使用不同的连接字符串将记录从一个表复制到另一个数据库表?

时间:2016-07-26 04:21:53

标签: sql vb.net ms-access-2007 copy-paste insert-into

我有两(2)个MS Access数据库,在不同的位置有不同的连接。从第一个数据库的表中删除记录是有效的,但插入从第二个数据库的表中复制的新记录不起作用。第一个数据库的表保持空白。发生了什么事情是它将新记录插入到第二个数据库的表中,这就是为什么第二个数据库有许多记录,因为它复制并插入到自身。我想要的是将第二个数据库中复制的记录粘贴/插入第一个数据库。

SQLStr1是第一个数据库的位置字符串 SQLStr2是第二个数据库的位置字符串

Dim conn As OleDbConnection
    Dim conn2 As OleDbConnection

    Dim cmd As OleDbCommand
    Dim cmd2 As OleDbCommand
    Dim SQLStr1 As String
    Dim SQLStr2 As String

    conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=psipop.accdb;Jet OLEDB:Database Password=cscfo13poppsi;")
   'I used 'psipop' because the database is located the same with the application.
    SQLStr1 = "DELETE * FROM pop 'psipop'"
    conn.Open()

    cmd = New OleDbCommand(SQLStr1, conn)
    cmd.ExecuteNonQuery()

    'I used " & TextBox3.Text & " because the textbox3 contains the path of the another database.
    conn2 = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= '" & TextBox3.Text & "' ;Jet OLEDB:Database Password=cscfo13poppsi; ")

    SQLStr2 = "INSERT INTO pop SELECT * FROM pop IN '" & TextBox3.Text & "'"
    conn2.Open()
    cmd2 = New OleDbCommand(SQLStr2, conn2)
    cmd2.ExecuteNonQuery()

请帮帮我。谢谢。

1 个答案:

答案 0 :(得分:0)

E.g。

Using sourceConnection As New OleDbConnection("source connection string here"),
      destinationConnection As New OleDbConnection("source connection string here"),
      insertCommand As New OleDbCommand("INSERT statement here", destinationConnection),
      adapter As New OleDbDataAdapter("SELECT statement here", sourceConnection) With {.InsertCommand = insertCommand,
                                                                                       .AcceptChangesDuringFill = False}
    Dim table As New DataTable

    adapter.Fill(table)
    adapter.Update(table)
End Using

这将从一个数据库填充DataTable并将行插入另一个数据库。您需要使用适当的参数配置insertCommand。请特别注意AcceptChangesDuringFill属性,该属性可确保所有DataRows都有RowState Added,因此可以插入。如果没有这个,所有RowState属性都将为Unchanged,并且不会保存任何内容。