2015-03-30 67 views
0

所以我使用C#和Visual Studio 2013.我目前有一个导入程序,它使用System.Data.OleDb连接到MS Access数据库和System.Data.SqlClient为Sql Server连接。从MS Access导入到大型数据集的SQL Server的方法

我最初做的是我会从MS Access读取数据并将数据存储在DataTable中,并将DataTable中的数据存储到SQL Server中。它一直很好,直到我终于碰到了一个有大约30个奇数列和近100万行的表格,并且我得到了OutOfMemoryException。

所以现在我试图想办法解决。我想在我尝试加载到DataTable之前设置行计数检查MS Access表,如果它是一定数量的行或更高我打算试图写入到外部文件,然后执行导入文件。

所以我问的是谁知道我可以怎么做呢?只有我见过的解决方案使用Interop,我听说你不想在代码中使用互操作,因为它的速度很慢,而且不可靠。我试图从MS Access进入一个.csv或.txt文件,但如果一个表没有主键我不知道如何去迭代一个表,如果它不是目前在一个数据表。

+0

你有没有看过如何将Access连接到一个Sql Server表..这可以很容易地完成你有没有尝试过任何谷歌搜索..我知道这是可能的,因为我已经这样做了很多次..也可以这也可以基于特定的记录数或记录数量块来完成。 也查找如何使用DTS或SSIS – MethodMan 2015-03-30 18:32:36

+0

然后我会建议寻找SSIS,或者写一些查询,您可以从Access中插入数据进入SQL仍然是你尝试谷歌搜索..? – MethodMan 2015-03-30 18:35:29

+0

我不想在MS Access上保存数据。 SQL Server提供数据备份,安全性,更多的存储等等。所以我不想做一个链接,它仍然在Access上,但在SQL Server上可以查看...我提到我知道如果有一个块PK,但是如果没有PK,我不知道如何在一个表格的某个时间段没有像DataTable那样。在这种情况下,MS Access表格大到要存储在DataTable中... – user3003304 2015-03-30 18:35:34

回答

2

如果您正在进行大数据导入,您可以使用和OleDbReader。当使用OleDbReader时,它不会影响您的内存,因为您一次只能读取一条记录来插入另一个数据库。

它可能需要稍长的时间,但会确保在没有OutOfMemory错误的情况下完成。

+0

我需要一些时间来测试这个,但这听起来不错,谢谢。 – user3003304 2015-03-30 18:51:03

+0

之前在几个项目中完成它,当我遇到同样的问题时。应该管用 :) – 2015-03-30 18:53:07

相关问题