Вот история:
Я хочу импортировать лист 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-битные приложения.