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