我编写了以下代码,以便将DataTable内容复制到MS Access表中。 问题在于数据集非常大,需要很长时间(超过10毫秒),并且在文件达到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的更快方法?
答案 0 :(得分:3)
可访问的最大数据库大小为2GB,您不能绕过此限制: https://support.office.com/en-us/article/access-specifications-0cf3c66f-9cf2-4e32-9568-98c1025bb47c?ui=en-US&rs=en-US&ad=US
答案 1 :(得分:1)
我看到您正在使用DELETE语句预先删除行。删除不一定能恢复可用空间。这就是我要做的...
我还要补充一点,您可能也可以使用Microsoft.Interop.Access来导入数据表...也许先将其保存到CSV文件中...然后以这种方式导入而不是使用INSERT语句。>