【发布时间】:2017-11-30 02:57:34
【问题描述】:
有一个 Windows 窗体应用程序。我正在使用 MS Access 数据库进行一些数据操作。我想将数据从一个数据库复制到另一个数据库。两个表中的表名、架构和数据类型相同。
我正在使用以下查询通过从源数据库中选择数据来批量插入目标数据库中的数据。
INSERT INTO [Table1] IN 'C:\Data\Users.mdf' SELECT * FROM [Table1]
插入数据后,我正在查询目标表以获取插入的数据。我正在使用 OleDbConnection 执行数据库操作。
我在这里面临的问题是,在执行 SELECT 语句以获取数据时执行上述 INSERT 查询后,我没有获取数据。但是,当我在调试模式下检查时,我正在获取数据。
我注意到,如果我在执行 INSERT 语句后等待一段时间,则数据正确。所以我假设它需要一些时间(延迟?)来完成批量插入操作。
我尝试在 INSERT 查询执行后提供Task.Delay(20000),但没有运气。有人可以在这里帮助我,我该如何解决这个问题?非常感谢任何帮助。
【问题讨论】:
-
我们在谈论多少数据?你有没有打开表格查看它并检查数据是否正确输入?我可能只是将源表导入目标数据库并执行适当的重写查询。然后它至少消除了两个独立数据库之间的通信中可能出现的问题。
-
大约有 70 万条记录。但我也可以用 10 条记录复制这个问题。在 INSERT 操作发生之前,源数据库和目标数据库的数据库连接都是打开的。
-
我建议你发布整个过程。
-
有时这可以通过在事务内部执行插入来解决。开始事务,执行语句,然后提交事务。为此,您必须声明一个工作区对象才能打开/关闭事务,但是当我想更快地强制提交数据时,这有时是实现它的技巧。
标签: c# winforms ms-access insert oledb