对不起,如果我的英语不太好,我会尝试解释这个问题 .
我需要将Acces mdb表(与OleDB连接)中的所有数据复制到MySql DB表(与ODBC连接)
我做了一个有效的解决方案,但速度非常慢,所以我想尝试其他解决方案来检查它们是否能给我更多性能 .
使用DataReader连接到mdb的解决方案,然后对于Datareader中的每一行,我将一个INSERT插入到Mysql表中(在复制之前我截断表以使其为空)
记录超过10K,这个操作非常慢,而且我需要在其他2个表上做同样的事情,这个表也非常大 .
我不能直接sql插入(作为 INSERT INTO A in ..... SELECT * FROM B
)因为1 DB有一个OleDB conn而另一个有一个ODBC conn .
所以我想尝试使用 TableAdapters
和 DataSet
进行此操作,但我无法使其正常工作 .
问题是数据集的 HasChanges
是 false
如果您需要一些我可以发布的代码,但我所做的是:
-
连接到MDb
-
创建OleDbTableAdapter
-
创建DataSet
-
使用TableAdapter填充DataSet
-
与MySqlDB的连接
-
创建ODBCTableAdapter
-
使用ODBCTableAdapter的Update命令和第一个数据集 .
但DS没有提交任何更改,因此他没有向DB写任何东西,所以我想使用另一个数据集并将数据从DS1复制到DS2以添加行,查看has.changes是否为true以及使用DS2制作ODBCTableadapter的更新命令 .
我试图在数据集之间复制数据:
ds2 = ds1.copy
我还尝试使用数据集导入功能,循环 DS1
数据行并将 DS1
中的所有行导入 DS2
. 在这两种情况下,行都会添加到DS2,但仍然是 HasChanges
,我该怎么办?只是为了澄清我没有使用 DS.Acceptchanges
的可能问题,定义了PrimaryKey,定义了 UpdateCommand
,DS有数据(我填充2个DataGrids来检查它) . 没有给出错误,只是没有数据写在DB上 .
有什么建议吗?谢谢你的建议 .
1 回答
你可以大大加快这个过程的唯一方法是批处理你的SQL更新命令 . 否则,每个更新请求将一次执行一个 .
您可能需要考虑MySQL LOAD DATA INFILE命令以便于快速导入大量数据 .
我不是't able to locate a function comparable to MS SQL Server' s SqlBulkCopy类,但如果您的MySQL库支持类似的功能,也可能是有意义的 .
通常,您生成的网络流量越少,您执行大型数据库插入的速度就越快(尽管在一个点之后可能存在其他限制因素) .