Скопируйте большой Datatable в таблицу MS Access C # - PullRequest
0 голосов
/ 15 февраля 2019

Я написал следующий код для копирования содержимого DataTable в таблицу MS Access.Проблема в том, что набор данных очень большой, он занимает много времени (более 10 миллионов) и останавливается, когда размер файла достигает 2 ГБ.Я знаю, что весь набор данных составляет около 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 голосов
/ 15 февраля 2019

Я вижу, что вы используете оператор DELETE для предварительного удаления строк.DELETE не обязательно восстанавливает свободное место.Вот что я бы сделал ...

  1. Используйте существующий код для удаления данных в таблице.
  2. Далее используйте Microsoft.Interop.Access для сжатия / восстановления базы данных.
  3. Наконец, запустите приведенный выше код для вставки таблицы данных.

Я также добавил бы, что вы, вероятно, могли бы использовать Microsoft.Interop.Access для импорта данных тоже ... Возможносначала сохраните его в файл CSV ... затем импортируйте его таким образом, а не с помощью операторов INSERT.

0 голосов
/ 15 февраля 2019

Максимальный размер дБ для доступа составляет 2 ГБ, вы не можете обойти это ограничение: https://support.office.com/en-us/article/access-specifications-0cf3c66f-9cf2-4e32-9568-98c1025bb47c?ui=en-US&rs=en-US&ad=US

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...