Самый быстрый способ обработки dbf из С#

Я использую OLEDB для вставки данных в файл .dbf DB4. Вставка 5500 строк занимает примерно 2,5 мин. Поэтому мне нужен более быстрый способ его реализации, поскольку мои данные будут содержать до 80 000 строк, а время, затраченное на это, будет слишком болезненным. Есть ли альтернативные более быстрые способы сделать это? По вашему мнению, что является лучшим способом?

PS: Пожалуйста, укажите прибл. время, затраченное на ваш метод, если это возможно


person Vicky    schedule 13.04.2011    source источник
comment
Вы используете одну транзакцию для всех вставок или одну транзакцию для каждой вставки?   -  person Joey    schedule 13.04.2011
comment
вставка нескольких строк в один запрос может значительно ускорить вашу работу...   -  person Marco    schedule 13.04.2011
comment
@Joey: нет, я вставляю строку за строкой.   -  person Vicky    schedule 13.04.2011
comment
отредактируйте свой скрипт/приложение вставки в соответствии с моим ответом, и вы увидите результаты :)   -  person Marco    schedule 13.04.2011
comment
@Joey: я пытался сделать это одной транзакцией. Все равно медленно.   -  person Vicky    schedule 13.04.2011


Ответы (1)


Вставка нескольких строк в один запрос может намного ускорить вашу работу.
Например: я только что попытался вставить 100 000 строк, используя 100 000 INSERT и 1000 INSERT со 100 строками в каждой: У меня ускорение около 100!!
Разница в использовании

INSERT INTO table (....) VALUES (...)

и

INSERT INTO table (....) VALUES (...),(...),(...),(...),(...),...

Поэтому отредактируйте свою функцию вставки, чтобы использовать 100 (например) записей за раз.

person Marco    schedule 13.04.2011
comment
@Vicky: ты пробовал это решение? Вы заметили улучшения или нет? - person Marco; 13.04.2011
comment
@Marco: я не могу вставить его как один запрос, так как имена вставляемых столбцов различаются для каждой строки :( - person Vicky; 13.04.2011
comment
@Vicky: как в базе данных можно сохранять строки с разными именами столбцов? Я не знал, что это возможно. Или я не понимаю, что вы имеете в виду :) - person Marco; 13.04.2011
comment
Моя ошибка. Я вставлял каждую строку, удаляя ячейку (столбец) с пустым значением. Таким образом, запрос каждый раз был разным. Я пытаюсь изменить его, как вы сказали. попробую :D - person Vicky; 13.04.2011
comment
Я не могу этого сделать. когда я использую, как вы сказали, он дает отсутствующую точку с запятой (;) в конце ошибки :( - person Vicky; 13.04.2011
comment
@Vicky: о боже, всегда нужно закрывать запрос точкой с запятой!! В любом случае, опубликуйте пример, и я исправлю это. - person Marco; 13.04.2011
comment
конечно я это сделал. Тем не менее это дает ошибку :( Например: INSERT INTO table (index, name) values ​​(110, 'Vicky'), (111, 'Marco'); Вы уверены, что можете вставить несколько строк в этом формате в файл DB4 .dbf ?? - person Vicky; 14.04.2011
comment
@Vicky: отредактируйте свой пост, вставив схему базы данных, и я попытаюсь создать ту же базу данных и вставить ... Если вы можете опубликовать событие, только строки, которые вы устанавливаете для соединения и вставляете записи ... - person Marco; 14.04.2011
comment
@Marco, я почти уверен, что OleDB не поддерживает многострочные вставки в одном SQL-запросе ... Каждую из них нужно отправлять отдельно. - person DRapp; 14.04.2011
comment
@Vicky: надо попробовать и то и другое, что я придумал. Завтра (вот уже вечер) я даю вам ответ. - person Marco; 14.04.2011
comment
@Marco: Что насчет ответа, о котором ты рассказал :( - person Vicky; 18.04.2011
comment
@Vicky: ты прав, но у меня были проблемы с моими детьми... Я сделаю это, как и обещала... - person Marco; 18.04.2011
comment
@Vicky: с помощью OleDB невозможно использовать синтаксис, который я дал вам, извините. Вы можете найти полезный обходной путь здесь - person Marco; 18.04.2011
comment
@ Марко или Вики, вы когда-нибудь заставляли это работать с обходным путем, который вы разместили в ссылке выше? - person reggaeguitar; 30.10.2014