Как лучше всего вставить 350 000 строк с ADO.Net - PullRequest
6 голосов
/ 05 апреля 2009

У меня есть CSV-файл с 350 000 строк, каждая строка имеет около 150 столбцов.

Как лучше всего вставить эти строки в SQL Server, используя ADO.Net?

Обычно я делал это вручную. Мне было интересно, есть ли какой-нибудь способ, которым я могу кодировать его, чтобы просто вставить все данные в SQL Server? Или какой-нибудь короткий путь, как это.

Кстати, я уже пытался сделать это с SSIS, но есть несколько проблем очистки данных, которые я могу решить с C #, но не так легко с SSIS. Данные начинались как XML, но я изменил их на CSV для простоты.

Ответы [ 3 ]

7 голосов
/ 05 апреля 2009

Создайте класс "CsvDataReader", который реализует IDataReader. Просто реализуйте Read (), GetValue (int i), Dispose () и конструктор: вы можете оставить остальные, выбрасывая NotImplementedException, если хотите, потому что SqlBulkCopy не будет их вызывать. Используйте read для обработки чтения каждой строки и GetValue для чтения i-го значения в строке.

Затем передайте его в SqlBulkCopy с нужными сопоставлениями столбцов.

С помощью этого метода я получаю около 30000 записей в секунду со скоростью вставки.

Если у вас есть контроль над форматом исходного файла, сделайте его разделителем табуляции, так как его легче разобрать, чем CSV.

Редактировать: http://www.codeproject.com/KB/database/CsvReader.aspx - тх Марк Марквелл.

2 голосов
/ 05 апреля 2009

SqlBulkCopy, если он доступен. Вот очень полезное объяснение использования SqlBulkCopy в ADO.NET 2.0 с C #

Я думаю, вы можете загрузить свой XML непосредственно в DataSet, а затем сопоставить SqlBulkCopy с базой данных и DataSet.

1 голос
/ 05 апреля 2009

Эй, вам следует вернуться к XML вместо csv, затем загрузить этот xml-файл во временную таблицу с использованием openxml, очистить ваши данные во временной таблице и, наконец, обработать эти данные.

Я следовал этому подходу для импорта огромных данных, когда мои XML-файлы имеют размер> 500 МБ, а openxml работает как шарм.

Вы будете удивлены, насколько быстрее это будет работать по сравнению с инструкциями ado.net вручную.

...