将数据从一个数据库复制到另一个数据库(.mdb 到 .accdb)

问题描述 投票:0回答:1

我有一个旧的 Access 数据库 (.mdb),需要将内容复制到新的 access 文件 (.accdb)

新文件具有与旧文件完全相同的完整数据库结构,它只需要数据。

无法读取.mdb文件中的数据,因为现有的Access不支持它。 此外,这是一项需要定期完成的任务。

所以我正在研究一个小的 vb.net 程序来完成这项任务。

我想将数据放入数据集,然后将其从新文件合并到数据集中并保存。

我设法读取数据并合并它,但由于某种原因,数据没有保存到新数据库中。不会引发任何错误。

知道出了什么问题吗?

这是到目前为止的代码

Dim oldConn As OleDbConnection
   Dim OldCmd As OleDbCommand
   Dim OldDA As OleDbDataAdapter
   Dim newconn As OleDbConnection
   Dim newCmd As OleDbCommand
   Dim newDA As OleDbDataAdapter
   Dim oldDS As DataSet = New DataSet
   Dim newDS As DataSet = New DataSet
   Dim builder As OleDbCommandBuilder

   oldConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=oldfile.mdb;")
   oldConn.Open()
   OldCmd = New OleDbCommand()
   OldCmd.CommandType = CommandType.Text
   OldCmd.Connection = oldConn
   OldCmd.CommandText = "SELECT * FROM TABLE1"
   OldDA = New OleDbDataAdapter(OldCmd)
   OldDA.Fill(oldDS, "TABLE1")

   newconn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=newfile.accdb;")
   newconn.Open()
   newCmd = New OleDbCommand()
   newCmd.CommandType = CommandType.Text
   newCmd.Connection = newconn
   newCmd.CommandText = "SELECT * FROM TABLE1"
   newDA = New OleDbDataAdapter(newCmd)
   builder = New OleDbCommandBuilder(newDA)
   newDA.Fill(newDS, "TABLE1")

   newDA.InsertCommand = builder.GetInsertCommand
   newDA.UpdateCommand = builder.GetUpdateCommand
   newDA.DeleteCommand = builder.GetDeleteCommand

   newDS.Merge(oldDS)
   newDA.Update(newDS, "TABLE1")
vb.net ms-access oledbconnection
1个回答
0
投票

问题是,默认情况下,当您在数据适配器上调用 Fill 时,它会在 DataTable 上调用 AcceptChanges。这意味着每个 DataRow 都有一个 Unchanged 的 RowState,因此当您调用 Update 时没有任何内容可插入。

您需要将第一个数据适配器的 AcceptChangesOnFill 属性设置为 False。这样,所有 RowStates 将保持已添加状态,并将在您调用 Update 时插入。

© www.soinside.com 2019 - 2024. All rights reserved.