OLEDBConnection.Open () генерирует «неопределенную ошибку» - PullRequest
3 голосов
/ 18 сентября 2008

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

Следующий код генерирует «Неуказанную ошибку» в сообщении 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.

Ответы [ 6 ]

3 голосов
/ 31 января 2010

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

1 голос
/ 07 мая 2013

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

0 голосов
/ 01 ноября 2008

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

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 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

...