所以我使用C#和Visual Studio 2013.我目前有一个导入器使用System.Data.OleDb连接到MS Access数据库,System.Data.SqlClient用于Sql Server连接。
我最初在做的是从MS Access中读取数据并在DataTable中存储表,并将DataTable中的数据存储到SQL Server中。它一直表现不错,直到我终于找到一个包含30多个列和近100万行的表,并且我得到了一个OutOfMemoryException。
所以现在我试图想一个解决方法。我想在我尝试加载到DataTable之前在MS Access表上设置行计数检查,如果它是一定数量的行或更高,我打算尝试写入外部文件,然后对其进行导入文件。
所以我要问的是有谁知道我怎么能这样做?只有我见过的解决方案才使用Interop,我已经听说过你不想在代码中使用互操作,因为它的速度慢而且非常可靠。我试图从MS Access导入到.csv或.txt文件,但是如果表没有主键我不知道如何在表上迭代#' 39;目前不在DataTable中。
答案 0 :(得分:2)
如果要对大数据进行导入,可以使用 OleDbReader 。使用OleDbReader时,它不会影响您的内存,因为您一次读取一条记录以插入另一个数据库。
可能需要稍长时间,但会确保在没有OutOfMemory错误的情况下完成。