2012-01-18 2 views
0

У меня есть файл Excel с большим объемом данных, который необходимо вставить в таблицу сервера MS Sql. Данные Excel содержат разные типы данных в каждом столбце. Мне нужно прокрутить данные строки каждой строки и преобразовать ее в строку, где каждый столбец для этой строки разделен запятой.Данные .NET Excel с использованием SqlBulkCopy

Excel data (| = column seperation): 

ID | FirstName | LastName | 

1 | John  | Smith | 

2 | Amy  | Jones | 

Так что новые строки будут выглядеть следующим образом:

Row 1= ID, FirstName, LastName 

Row 2= 1, John, Smith 

Row 3= 2, Amy, Jones 

Затем каждая строка данных после преобразования должна быть вставлен в Sql таблицу. Обратите внимание, что файл excel, вероятно, содержит 10 000 строк.

Что является самым эффективным способом сделать это в .NET с использованием C#, пожалуйста?

+0

Спасибо, ребята. Я должен сказать, что это нужно делать в .NET, потому что это часть функциональности, которая должна быть добавлена ​​в приложение Windows.Я думал больше использовать OleDbCommand, чтобы выбрать данные, а затем некоторые как цикл через строки и создать нужные мне данные ... – creativeincode

ответ

2

Попробуйте записать следующую C# программы:

  1. содержимое файла Чтение Excel с помощью классов в пространстве имен Microsoft.Office.Interop.Excel.
  2. Преобразование строк и их запись в другом файле в формате, который понимает команда SQL Server BULK INSERT.
  3. Используйте команду BULK INSERT для эффективной вставки всех строк в базе данных SQL Server.

UPDATE: Есть также ряд поддерживаемых методов, которые не требуют написания кода. Следующая статья базы знаний суммирует их все: http://support.microsoft.com/kb/321686.

+0

+1 мое первоначальное решение :) –

+0

Посмотрите этот пример: http: //blog.sqlauthority. com/2008/02/06/sql-server-import-csv-file-in-sql-server-using-bulk-insert-load-comma-delimited-file-in-sql-server/ –

+0

Является ли это наиболее я не уверен. Хотя, возможно, BULK INSERT очень быстрый, если не самый быстрый способ вставки данных в SQL Server. – Kyberias

1

Другим решением является массовая вставка в SQL Server с использованием SqlBulkCopy.

Вы должны также прочитать excel и создать файл .csv, но после этого вся работа будет выполнена. Вы можете проверить пример THIS.

0

Перейти на многопоточность, это самый эффективный способ вставить большие объемы данных, которые вам нужно конвертировать на лету без использования SqlBulkCopy. Причиной является то, что хотя один поток работает над преобразованием своих текущих данных строки в формат, который требуется другим потокам, считывается из источника данных или вставляется в базу данных.

У меня есть лист распространения Excel, который принимается каждый месяц и вставляется в базу данных SQL-сервера. Лист содержит приблизительно 260 000 строк, и для вставки всех данных с использованием написанной мной программы требуется более 1 минуты. При попытке вставить их последовательно программа длилась более 40 минут, прежде чем я ее убил.

Мое решение использует VB.net просто потому, что взаимодействие с Excel проще. Вы можете написать что-то подобное на C# или создать библиотеку (DLL) из кода VB и ссылку на нее из вашего приложения C#. Он загружает всю таблицу распространения в память, затем назначает куски строк 10k для разделения потоков; любые оставшиеся строки меньше 10k в конце назначаются последнему потоку. Каждый поток считывает строку данных из памяти, создавая оператор INSERT и выполняя его против базы данных.

Я рад поделиться этим кодом, если вы хотите, но это немного, чтобы опубликовать в этом ответе. Дайте знать, если вас это заинтересовало.

Смежные вопросы