У меня есть текстовый файл, содержащий около миллиона записей. Каков наилучший способ вставить их в базу данных SQL Server из C#?Массовые вставки записей в базу данных SQL Server
Могу ли я использовать BULK INSERT
?
У меня есть текстовый файл, содержащий около миллиона записей. Каков наилучший способ вставить их в базу данных SQL Server из C#?Массовые вставки записей в базу данных SQL Server
Могу ли я использовать BULK INSERT
?
Лучшим способом является использование bcp
utility или SSIS workflow. Эти инструменты имеют такие усовершенствования, как кеширование и пакетная обработка, которые вы пропустите в наивной реализации. Следующим лучшим вариантом является оператор BULK INSERT
, если сам движок SQL Server может достигнуть файла. Последним вариантом будет класс SqlBulkCopy
, который позволяет вашему приложению читать файл, может быть, обработать его и преобразовать, а затем передать данные в качестве перечислителя в SqlBulkCopy.
Используется C# требование? Самый быстрый способ - использовать инструмент командной строки bcp: http://msdn.microsoft.com/en-us/library/ms162802.aspx
Спасибо Крис Шайн, я хочу использовать C#, потому что это будет частью приложения, написанного с C# –
Недавно я работал над такой же проблемой, я понял, что для нее есть несколько решений.
Я написал BatchProgram (для дизайна пакетной программы читать это - http://msdn.microsoft.com/en-us/magazine/cc164014.aspx)
Вы можете использовать SQL Server Utilities либо Bcp.exe или osql.exe или рамочное .net прилагается класс SqlBulkCopy.
Я закончил с использованием BCP (я получил файл CSV и используется файл форматирования и загрузки данных) и OSQL (я использовал OSQL где я должен поставить файл на хранимого прок)
я также пошел в класс .NET Process и использовал outputdatarecieved событие для регистрации всего вывода BCP.exe в консоль (прочесть это -), это сработало довольно хорошо.
Я также пытался использовать класс SQLBulkCopy, но может быть медленным, если вы сначала загружаете данные в datatable (http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx), если вы используете IDataReader (http://msdn.microsoft.com/en-us/library/434atets.aspx), это может быть быстро.
Поскольку у меня было миллионы строк, я попытался использовать CSVReader (http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader), который довольно быстр. Но по линии было слишком много проблем при преобразовании данных, и у меня не было много гибкости на стороне SQL-сервера.
В итоге я использовал BCP и OSQL.
Спасибо .. Я проверю –
я использовал SqlBulkCopy, но вопрос в том, как я могу знать, что общее число строк, вставленного с помощью SqlBulkCopy .WriteToServer()? –
Просто из любопытства, почему вы бы поставили 'SqlBulkCopy' за другими вариантами? – jadarnel27