2009-12-30 4 views
1

Мне нужно открыть большой файл excel 150 МБ с полумиллионными записями (excel 2007 .xlsx file), и мне нужно перенести его на sql-сервер, я используйте oledbconnection, однако, когда я пытаюсь открыть соединение, это занимает более 5 минут, после чего появляется System.OutMemoryExcepion. Я думаю, что это соединение пытается открыть весь файл в памяти, как я могу читать строки за строкой. Я работаю с визуальными Net 2005 и C#C# При открытии большого файла Excel (150MB) от OledbConnection System.OutOfMemoryException

string archivoExcel="c:\largeExcel.xlsx" 
string conneStringInraSIS = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
            "Data Source=" + archivoExcel + ";" + 
            "Extended Properties='Excel 12.0;HDR=YES;'"; 


OleDbConnection connexcel = new OleDbConnection(conneStringInraSIS); 
connexcel.Open();   
+0

Это 150 МБ или 250 МБ? – SLaks

+1

Вы должны построить свою строку соединения с помощью 'OleDbConnectionStringBuilder' вместо того, чтобы вручную конкатенировать строку, или вы потерпите неудачу, если имя файла имеет' ''. – SLaks

+1

Что находится в файле? Может ли он быть сохранен в формате CSV? Кроме того, 2007 Excel - это всего лишь куча зашифрованных XML-файлов. Вы можете манипулировать ими напрямую с помощью текстового чтения, считая, например, 1000 строк за раз. –

ответ

0

Новый ответ (на основе информации, содержащейся в комментариях):

Посмотрите в VSTO. Я бы создал addin, который позволил бы менеджеру щелкнуть кнопку ленты, чтобы загрузить данные в SQL Server, а затем получить информацию с SQL Server (это позволит Excel обрабатывать свои собственные файлы, точно как это работает).

Вот ссылка, которая поможет вам начать: MSDN Code Sample

и вы можете скачать VSTO here.

+0

Спасибо, но у меня есть логика бизнеса, и я должен обновить файл excel, я не знаю, что делать – David

+0

Какая бизнес-логика? Что значит, вы должны обновить файл? - В зависимости от того, что вы пытаетесь сделать, вы можете сделать это в SSIS –

+0

Если вы хотите, вы можете преобразовать файл xlsx в файл csv. Затем используйте эту ссылку для эффективного скачивания файла csv: http://www.codeproject.com/KB/database/CsvReader.aspx –

1

Приоритет №1 должен получать данные из таблицы xlsx. Примените бизнес-логику, как только это произошло. Я бы экспортировал CSV из листов и справился с ними.

+0

Эта прогма для менеджера, у которого много файлов excel, он получает этот файл от других людей, он хочет 2 вещи: 1. загружать все файлы в базу данных SQL-сервера и получать отчеты. 2. - обновлять эти файлы excel (листы и поля, которые он выбирает), с некоторой информацией о базе данных – David

0

Некоторые из комментариев предполагали экспортировать файлы Excel в CSV и анализировать файл CSV за строкой, но это, похоже, не является решением вашей проблемы.

Однако вы можете использовать объекты Excel ActiveX, чтобы открыть файл xlsx и сохранить его как CSV из кода. Объект Workbook имеет метод SaveAs, который принимает формат файла.

Таким образом, вы можете получить данные CSV прямо из файла xlsx и не должны беспокоиться о том, что ваши клиенты беспокоятся об этом.

Предполагается, что в системе, на которой выполняется этот процесс, установлен Excel.

1

Я столкнулся с этой проблемой. Лучшее, что я нашел в решении этой проблемы, это перейти на codeplex.com и загрузить Excel.dll. Эта DLL решит эту проблему очень легко. Используя это, вы можете напрямую сохранять свои данные в наборе данных и делать то, что когда-либо захотите с ним делать. Вы найдете образец кода на сайте.

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