Как наилучшим образом вставить 350 000 строк с ADO.Net

StackOverflow https://stackoverflow.com/questions/718357

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Каким был бы наилучший способ вставить эти строки в SQL Server, используя ADO.Net?

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

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

Это было полезно?

Решение

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

Затем передайте его в SqlBulkCopy с соответствующими сопоставлениями столбцов, которые вы хотите.

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top