Лучший метод для импорта файла CSV или Excel в SQL Server 2005 с использованием .net MVC view

Я ищу лучший способ для импорта файла CSV или Excel в SQL Server 2005 с использованием .net MVC.

Спасибо.

13.10.2009 10:29:46
2 ОТВЕТА
РЕШЕНИЕ

Есть действительно хорошая библиотека под названием FileHelpers, которая а) на 100% свободна, б) полностью в C #, и она может легко импортировать любой текстовый файл - разделенный запятыми, табуляцией, фиксированной шириной и так далее.

У вас не должно возникнуть проблем с использованием этого для загрузки вашего CSV-файла в объекты в памяти и его сохранения на SQL Server с использованием ADO.NET.

В FileHelpers сначала необходимо иметь класс, который описывает ваши данные, например, класс «Клиент» (или что бы вы ни импортировали).

Затем вы можете импортировать файл, используя код примерно так:

FileHelperEngine<Customer> engine = new FileHelperEngine<Customer>();
Customer[] dataLoaded = engine.ReadFile(fileName);

Когда у вас есть массив клиентов, вы можете просто выполнить итерацию и сохранить данные (обычно внутри транзакции), например, с помощью хранимой процедуры или специального SQL-запроса:

using(TransactionScope ts = new TransactionScope())
{
   foreach(Customer c in dataLoadad)
   {
      SaveCustomer(c);
   }

   ts.Complete();
}

или вы можете преобразовать массив customer в DataTable и использовать SqlBulkCopy, чтобы массово вставить его в базу данных SQL Server - есть много вариантов!

ОБНОВЛЕНИЕ:
Есть ли у вас [DelimitedRecord]или другой из этих атрибутов в вашем BlackListDeviceклассе?

3
10.09.2012 20:48:25
Привет, спасибо за ответ. Я посмотрел на файл помощника. Я использую ActiveRecord и NHibernate. Я получаю эту ошибку. У класса записей нет записей. в этой строке FileHelperEngine engine = new FileHelperEngine (typeof (BlackListDevice)); В очередной раз благодарим за помощь.
user189009 13.10.2009 11:55:42
Да, мой класс выглядит следующим образом [DelimitedRecord ("")] [ActiveRecord] открытый класс BlackListDevice: идентифицировано {[Property] public virtual string DeviceReference {get; набор; }}
user189009 13.10.2009 13:02:03
И когда вы получаете эту ошибку? При компиляции? когда работает? Содержит ли ваш файл какие-либо данные и соответствует ли он вашей структуре записей?
marc_s 13.10.2009 15:52:36
Действительно ли это целесообразно, если вы говорите 1 000 000 записей или больше?
Jon 14.12.2009 19:47:49
Нет, если у вас так много записей, я, вероятно, найду способ использовать один из методов массового копирования. Но это редко - как правило, у вас есть максимум пара сотен или несколько тысяч - для этих 80-90% случаев FileHelpers работает как чудо.
marc_s 14.12.2009 19:58:28

Исправлено это путем добавления отдельного класса для загрузки файлов, работает как шарм с помощью FileHelper.

0
29.09.2011 12:45:35