首页 文章

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

提问于
浏览
0

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

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

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

问题是数据集的 HasChangesfalse

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

  • 连接到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 回答

  • 1

    你可以大大加快这个过程的唯一方法是批处理你的SQL更新命令 . 否则,每个更新请求将一次执行一个 .

    您可能需要考虑MySQL LOAD DATA INFILE命令以便于快速导入大量数据 .

    我不是't able to locate a function comparable to MS SQL Server' s SqlBulkCopy类,但如果您的MySQL库支持类似的功能,也可能是有意义的 .

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

相关问题