将大数据表复制到 MS Access 表 C#
Posted
技术标签:
【中文标题】将大数据表复制到 MS Access 表 C#【英文标题】:Copy large Datatable into MS Access table C# 【发布时间】:2019-07-09 18:33:45 【问题描述】:我编写了以下代码,以便将 DataTable 内容复制到 MS Access 表中。 问题是数据集非常庞大,耗时很长(超过10mns),当文件达到2GB时就停止了。我知道整个数据集在 RAM 中大约 785Mo,大约 820000 行。
public static bool InsertmyDataTableDAO(string filePathName, DataTable myDataTable)
string connectionString = string.Format(ConnectionParameters.MsAccessConnectionStringOledb, filePathName);
DBEngine dbEngine = new DBEngine();
Database db = dbEngine.OpenDatabase(filePathName);
db.Execute("DELETE FROM " + myDataTable.TableName);
Recordset rs = db.OpenRecordset(myDataTable.TableName);
Field[] tableFields = new Field[myDataTable.Columns.Count];
foreach(DataColumn column in myDataTable.Columns)
tableFields[column.Ordinal] = rs.Fields[column.ColumnName];
foreach(DataRow row in myDataTable.Rows)
rs.AddNew();
foreach(DataColumn col in row.Table.Columns)
tableFields[col.Ordinal].Value = row[col.Ordinal];
rs.Update();
rs.Close();
db.Close();
return true;
有没有更快的方法将数据集从数据表复制到 MS Access DB?
【问题讨论】:
This article has information about the limits of Microsoft Access 数据库文件和对象。在大多数情况下,当数据库超出以下限制时,可能表明存在设计问题。 谢谢,我想有更好的方法可以继续,这就是我提出问题的目的。如果要将数据表复制到 ms Access 表中,您会怎么做? 如你所愿。但是Access文件的硬限制是2GB。使用 SQL Server Express 或类似的。 【参考方案1】:访问的最大数据库大小为 2GB,您无法绕过此限制: https://support.office.com/en-us/article/access-specifications-0cf3c66f-9cf2-4e32-9568-98c1025bb47c?ui=en-US&rs=en-US&ad=US
【讨论】:
【参考方案2】:我看到您正在使用 DELETE 语句预先删除行。 DELETE 不一定会恢复可用空间。这就是我要做的......
-
使用现有代码删除表中的数据。
接下来,使用 Microsoft.Interop.Access 压缩/修复数据库
最后,运行上面的代码来插入数据表。
我还要补充一点,您也可以使用 Microsoft.Interop.Access 来导入数据表...也许先将其保存到 CSV 文件中...然后以这种方式导入,而不是使用 INSERT 语句。
【讨论】:
感谢 Douglas.kirschman。 DELETE 语句只是为了安全。该表应该是空的。我尝试了 csv 方法,但由于行太多而失败。我会按照建议尝试 Interop.Access 对于手动测试,只需使用 Access 打开该数据文件,然后执行 C+R,然后退出并运行您的代码。此外,800,000 行也不算多。您应该能够在大约 1-2 分钟内完成那么多行。 (而且你的代码看起来不错)。 我的文件很大,因为我在创建数据库时犯了一个错误。我对所有字符串字段都使用了 CHAR(50),而不是 VARCHAR。现在我的文件是 360MB,但执行复制仍然需要 17 分钟(820000 行 * 43 列)。所以我仍然想知道是否有更快的方法来进行。感谢您的帮助以上是关于将大数据表复制到 MS Access 表 C#的主要内容,如果未能解决你的问题,请参考以下文章
使用 c# 将 MS Access 表数据添加到 SQL Server 表中
如何在 MS Access 中使用 C# 获取所有表名和列名?
使用 Python 将数据从 MS Access 复制到 MS Excel