【发布时间】:2015-03-31 02:45:48
【问题描述】:
所以我使用 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 表设置行计数检查,如果它是一定数量或更高的行数,我计划尝试写入外部文件,然后对其进行导入文件。
所以我要问的是有人知道我该怎么做吗?只有我见过的解决方案使用互操作,我听说你不想在代码中使用互操作,因为它速度慢而且不太可靠。我试图从 MS Access 导入到 .csv 或 .txt 文件,但如果表没有主键,如果表当前不在 DataTable 中,我不确定如何迭代表.
【问题讨论】:
-
您是否查看过如何将访问链接到 Sql Server 表。如果您尝试过任何 google 搜索,这可以很容易地完成。我知道这是可能的,因为我以前做过很多时间..这也可以根据特定的记录数或记录数分块完成..还可以查看如何使用 DTS 或 SSIS
-
那么我建议研究 SSIS,或者编写一些查询,您可以在其中将 Access 中的数据插入 SQL 中,您是否尝试谷歌搜索..?
-
我不想在 MS Access 上保留数据。 SQL Server 提供数据备份、安全性、更多存储等。所以我不想做一个链接,它仍然在 Access 上但在 SQL Server 上可以查看......我提到如果有一个我知道如何分块做PK,但如果没有 PK,我不知道如何一次获取表格的各个部分,而不会将它放在 DataTable 之类的东西中。在这种情况下,MS Access 表太大而无法存储在 DataTable 中...
-
是的,我用谷歌搜索过。我在上面提到过,我看到人们过去使用 Interop 进行导入以从 Access 到 XLS 文件的方法,但我不想使用 Interop。
-
除非绝对必要,否则我认为服务器管理员不会允许在服务器上进行更改。此外,我不确定该解决方案是否依赖于 Jet...不过,我需要一些时间来查看 SSIS,所以感谢您提供的那篇文章。
标签: c# import datatable out-of-memory oledb