将大型数据表复制到MS Access表C#

时间:2019-02-15 15:22:01

标签: c# sql ms-access datatable

我编写了以下代码,以便将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的更快方法?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我看到您正在使用DELETE语句预先删除行。删除不一定能恢复可用空间。这就是我要做的...

  1. 使用现有代码删除表中的数据。
  2. 接下来,使用Microsoft.Interop.Access压缩/修复数据库
  3. 最后,运行上面的代码以插入DataTable。

我还要补充一点,您可能也可以使用Microsoft.Interop.Access来导入数据表...也许先将其保存到CSV文件中...然后以这种方式导入而不是使用INSERT语句。