Заполнение таблицы access файле
От: erael  
Дата: 13.05.06 13:46
Оценка:
Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.
Пробовал через заполнение таблицы и последующем DataAdapter.UpDate() — 16 минут
Пробовал через INSERT INTO получил на минуту быстрее — 15 минут

А вот как это сделать быстрее мне не придумать...
Код реализующий это написанный и запущенный в access делает это же где то за 3 минуты.
Может есть какой способ из C# кода инициировать access базу выполнить в нутри себя код записанный заблоговременно???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Заполнение таблицы access файле
От: IT Россия linq2db.com
Дата: 14.05.06 05:35
Оценка:
Здравствуйте, erael, Вы писали:

E> Пробовал через INSERT INTO получил на минуту быстрее — 15 минут


Попробуй после создания команды вызвать Prepare. Получишь где-то 20% ускорения.

E> А вот как это сделать быстрее мне не придумать...


Попробуй добавлять в таблицу записи в транзакции по 500-1000 записей (с точным числом нужно экспериментировать). Получишь ускорение раз в пять.

E> Код реализующий это написанный и запущенный в access делает это же где то за 3 минуты.


В Access 350k записей? Может лучше сразу подумать об альтернативах?

E> Может есть какой способ из C# кода инициировать access базу выполнить в нутри себя код записанный заблоговременно???


Можно ещё попробовать добавлять с помощью INSERT INTO, но не по одной записи, а десятками/сотнями (тоже нужно экспериментировать) через UNION.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re: Заполнение таблицы access файле
От: wildwind Россия  
Дата: 14.05.06 10:51
Оценка:
Здравствуйте, erael, Вы писали:

E>Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.


Самый быстрый способ — записать их в текстовый файл (если они уже не там), слинковать к базе как таблицу, и выполнить INSERT SELECT в целевую таблицу.
Re[2]: Заполнение таблицы access файле
От: erael  
Дата: 15.05.06 17:12
Оценка:
Здравствуйте, wildwind, Вы писали:

E>>Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.

W>Самый быстрый способ — записать их в текстовый файл (если они уже не там), слинковать к базе как таблицу, и выполнить INSERT SELECT в целевую таблицу.

Честно говоря я не очень представляю как это можно .Net кодом реализовать...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Заполнение таблицы access файле
От: Stepkh  
Дата: 16.05.06 08:17
Оценка:
Здравствуйте, erael, Вы писали:

E>Здравствуйте, wildwind, Вы писали:


E>>>Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.

W>>Самый быстрый способ — записать их в текстовый файл (если они уже не там), слинковать к базе как таблицу, и выполнить INSERT SELECT в целевую таблицу.

E> Честно говоря я не очень представляю как это можно .Net кодом реализовать...


DAO?

var
   FAccessApp :  _DBEngine;
   FDataBase   :  DAO_TLB.DataBase;
   xJet:          WorkSpace;
begin
try
  FAccessApp := DAO_TLB.CoDBEngine.Create;
  xJet := FAccessApp.CreateWorkspace('', 'admin', '', dbUseJet);
  xJet.OpenDatabase ('',false,false,'MS Access;PWD=;DATABASE=database.mdb');
  FDataBase := xJet.Databases[0];


  sql := 'ALTER TABLE TEST ADD REMARKS TEXT(255) NULL;';

  FDataBase.Execute (sql,0);

  FDataBase.TableDefs.Item ['TEST'].Fields.Item['REMARKS'].Set_AllowZeroLength(true);

finally
  FAccessApp := nil;
  xJet := nil;
  Application.Terminate;
end;


и т.д.
таким же способом приликовать внешнею таблицу и будет счастье
Re: Заполнение таблицы access файле
От: erdiop  
Дата: 16.05.06 13:18
Оценка:
Здравствуйте, erael, Вы писали:

E>Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.

E> Пробовал через заполнение таблицы и последующем DataAdapter.UpDate() — 16 минут
E> Пробовал через INSERT INTO получил на минуту быстрее — 15 минут

E> А вот как это сделать быстрее мне не придумать...

E> Код реализующий это написанный и запущенный в access делает это же где то за 3 минуты.
E> Может есть какой способ из C# кода инициировать access базу выполнить в нутри себя код записанный заблоговременно???

Из С++ — ADO & ADOX. Наверное, в С# их тоже можно использовать (Connection, Recordset, Catalog, Command)
Re[4]: Заполнение таблицы access файле
От: erael  
Дата: 16.05.06 16:44
Оценка:
Здравствуйте, Stepkh, Вы писали:

E>>>>Подскажите... как можно быстро затолкать в access базу порядка 350000 строк при помощи ADO.Net.

W>>>Самый быстрый способ — записать их в текстовый файл (если они уже не там), слинковать к базе как таблицу, и выполнить INSERT SELECT в целевую таблицу.

E>> Честно говоря я не очень представляю как это можно .Net кодом реализовать...


S>DAO?


S>
S>var
S>   FAccessApp :  _DBEngine;
S>   FDataBase   :  DAO_TLB.DataBase;
S>   xJet:          WorkSpace;
S>begin
S>try
S>  FAccessApp := DAO_TLB.CoDBEngine.Create;
S>  xJet := FAccessApp.CreateWorkspace('', 'admin', '', dbUseJet);
S>  xJet.OpenDatabase ('',false,false,'MS Access;PWD=;DATABASE=database.mdb');
S>  FDataBase := xJet.Databases[0];


S>  sql := 'ALTER TABLE TEST ADD REMARKS TEXT(255) NULL;';

S>  FDataBase.Execute (sql,0);

S>  FDataBase.TableDefs.Item ['TEST'].Fields.Item['REMARKS'].Set_AllowZeroLength(true);

S>finally
S>  FAccessApp := nil;
S>  xJet := nil;
S>  Application.Terminate;
S>end;

S>


S>и т.д.

S>таким же способом приликовать внешнею таблицу и будет счастье

Оно конечно круто, но в MSDN 2005 я этого не нашёл
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.