Oledb на wcf имеет некоторые проблемы с большими файлами Excel? - PullRequest
0 голосов
/ 28 марта 2012

Вот история:

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

Когда все готово, я отправляю файл на мой локальный wcf-сервер.
Затем wcf записывает файл во временную папку (C: \ Windows \ Temp).
Я создаю соединение oledb и выполняю команду count (*) на листе, и именно здесь все идет не так.

Код:

            _connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");
            OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM [" + .SheetName + "]", _connection);
            if (_connection.State == ConnectionState.Closed)
                _connection.Open();
            TotalRows = (int)command.ExecuteScalar();

Да, я здесь не использую, не против, пожалуйста ...
Когда (int)command.ExecuteScalar(); выполняется, это идет не так.
Я получаю ошибку: System resource exceeded.. Это исключение OleDBException.

Память моего компьютера не заполняется, и похоже, что он даже не пытается прочитать файл. Он мгновенно падает.

Некоторая информация о файле, который я пытаюсь прочитать:

  • 154 тыс. Строк
  • Имеет 114 столбцов
  • Размер 90mb

Если я возьму подмножество 50 тыс. Строк этого, оно не вылетит.
Хотя это говорит, что TotalRows 2536.
Сначала я подумал, что файл поврежден, но это не так, поскольку этот точно такой же код работает на клиенте с точно таким же файлом.

Если я возьму подмножество из 2500 строк, все пойдет хорошо, и теперь возникнут проблемы.
Если я возьму подмножество 2600 строк (неважно, какие строки), количество строк все равно будет 2536.

Мои вопросы:

  • Что не так?
  • Кто несет ответственность за ошибку и неверные результаты?
  • Почему это работает на клиенте, а не на моем сервере (на той же машине!)
  • Почему он не падает с меньшим файлом?

Нужна дополнительная информация? Пожалуйста, оставьте комментарий.

Обновление 1:
И клиент, и сервер работают как 32-битные приложения.

1 Ответ

2 голосов
/ 07 августа 2012

есть такая же проблема.Я пытаюсь прочитать файл Excel с 30K строк через веб-сайт.Но я взял только подмножество 8007 строк.Я обнаружил, что если я изменю идентификацию пула приложений на администратора вместо сетевой службы, то все в порядке.Кроме того, если я преобразовал свой файл Excel в .xls, провайдер Jet может также прочитать 30 тыс. Строк.

Затем я просматриваю форумы и обнаруживаю это и пробую свой код с параметром ExtendedProperties IMEX = 1, и все 30 тыс. Строк прочитаны.

...