使用数据集将数据从1Db复制到另一个

时间:2011-10-24 10:59:31

标签: vb.net dataset odbc oledb

对不起,如果我的英语不太好,我会尝试解释这个问题。

我需要将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。

所以我想尝试使用TableAdaptersDataSet进行此操作,但我无法使其正常工作。

问题是数据集的HasChangesfalse

如果您需要一些我可以发布的代码,但我所做的就是:

  • 连接到MDb
  • 创建OleDbTableAdapter
  • 创建数据集
  • 使用TableAdapter填充DataSet
  • 与MySqlDB的连接
  • 创建ODBCTableAdapter
  • 使用ODBCTableAdapter的Update命令和第一个数据集。

但是DS没有提交任何更改,因此他没有向DB写任何东西,所以我想使用另一个数据集并将数据从DS1复制到DS2以添加行,看看has.changes是否为真,并且正在制作更新命令ODBCTableadapter使用DS2。

我尝试在数据集之间复制数据:

ds2 = ds1.copy

我还尝试使用数据集导入功能,循环DS1数据行并导入DS1DS2的所有行。 在这两种情况下,行都会添加到DS2,但仍然HasChanges为假,我该怎么办? 为了澄清我未使用DS.Acceptchanges的可能问题,定义了PrimaryKey,定义了UpdateCommand,DS有数据(我填充了2个DataGrids来检查它)。 没有给出错误,只是没有数据写在DB上。

有什么建议吗?谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

您可以大量加快流程的唯一方法是批量处理SQL更新命令。否则,每个更新请求将一次执行一次。

您可能需要考虑使用MySQL LOAD DATA INFILE命令来快速导入大量数据。

我无法找到与MS SQL Server的SqlBulkCopy类相当的功能,但是如果您的MySQL库支持类似的功能,也可能会感兴趣。

通常,您生成的网络流量越少,您执行大型数据库插入的速度就越快(尽管在某个点之后可能还有其他限制因素)。