OLEDBConnection.Open () генерирует 'Unspecified error'

У меня есть приложение, которое загружает файл Excel .xls в файловую систему, открывает файл с объектом oledbconnection, используя метод .open() в экземпляре объекта, а затем сохраняет данные в базе данных. Загрузка и запись файла в файловую систему отлично работает, но я получаю сообщение об ошибке при попытке открыть файл на нашем производственном сервере только . Приложение отлично работает на двух других серверах (серверы разработки и тестирования).

Следующий код генерирует «Unspecified Error» в Exception.Message.

<�Сильный> Цитата:

        System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
        try
        {
            x.Open();
        }
        catch (Exception exp)
        {
            string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs.  " + exp.Message;
            Utilities.SendErrorEmail(errorEmailBody);
        }

: Конец цитаты

Параметры c: \\ temp и c: \ Documents and Settings \\ aspnet \ local settings \ temp для сервера дают полный контроль \ aspnet.

Я считаю, что есть какие-то проблемы с разрешениями, но, похоже, не может найти разницы между разрешениями на отмеченные папки и папкой/папкой, в которую загружен файл Excel. Это же место используется для сохранения файла и его открытия, а методы работают на моей рабочей станции и на двух веб-серверах. Windows 2000 SP4.

0
добавлено отредактировано
Просмотры: 25

6 ответы

Что-нибудь во внутреннем исключении? Это 64-битное приложение? Поставщики OLEDB не работают в 64-разрядной версии. У вас должно быть целевое приложение x86. Обнаружено это при получении ошибки при попытке открыть БД доступа на моем 64-битном компьютере.

0
добавлено

Ага. Я тоже это сделал. Выбрал IMEX = 1, достал расширенные свойства и т. Д. Мне удалось разбить его на dev и тестовых серверах. :) Я помещал их обратно по одному, пока он не был исправлен на dev и не тестировался снова, но все еще не работал на prod.

0
добавлено

Если вы используете олицетворение, вам нужно будет дать разрешение пользователю-олицетворению вместо/в дополнение к пользователю aspnet.

0
добавлено

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

0
добавлено
В самом деле? Этот ответ решил вашу проблему?
добавлено автор juan, источник

Попробуйте обернуть местоположение в одинарных кавычках

System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
0
добавлено

Хотя проблема с разрешениями может быть более распространена, вы также можете столкнуться с этой ошибкой из ограничений файловой системы Windows/Access Jet DB Engine, 64/255, я думаю. Если вы повредите 255 одновременных соединений для чтения/записи одновременно или ограничение на 64 (?) Подключения для каждого процесса, вы можете получить эту ту же ошибку. По крайней мере, я столкнулся с этим в приложении, где соединения постоянно создавались и никогда не закрывались должным образом. Простой Conn.close (); упал, и жизнь была хорошей. Я полагаю, что у Excel могут быть подобные проблемы.

0
добавлено
В качестве примечания стороны: Conn.Dispose() , по-видимому, не закрывает соединение.
добавлено автор Residuum, источник