У нас есть приложение C # / ASP.NET (2.0), работающее на IIS 6 в Windows Server 2003 Enterprise Edition. Это приложение читает файлы Excel, используя OleDb, но бывают случаи, когда мы получаем исключение "Unspecified Error" из приложения.
Файл сохраняется во временном каталоге нашим кодом загрузки файла перед открытием. Поскольку в IIS разрешен анонимный доступ и мы также используем олицетворение в web.config, папка C: \ Windows \ Temp \ имеет соответствующие разрешения для учетной записи гостя в Интернете (IUSR_ [MachineName]), которую можно создать, изменить и удалить файлы там.
Строка подключения OleDb:
Поставщик = Microsoft.Jet.OLEDB.4.0; Источник данных = C: \ Windows \ Temp \ tmp123.tmp.xls;
Расширенные свойства = "Excel 8.0; HDR = Да; IMEX = 1;"
[Приведенный выше атрибут «Источник данных» будет меняться для каждого файла.]
The stack trace of the exception is:
System.Exception: FileParsingFailed ---> System.Data.OleDb.OleDbException:
Unspecified error at
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,
OleDbConnection connection) at
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options,
Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection
owningConnection, DbConnectionPoolGroup poolGroup) at
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection
owningConnection) at
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory) at
System.Data.OleDb.OleDbConnection.Open()
Обход:
До настоящего времени единственным обходным решением, которое мы могли найти, было создание iisreset (у нас также есть переработка пула приложений, настроенная так, чтобы она происходила один раз в день в IIS, но, похоже, это не помогает, поскольку проблема иногда сохраняется в течение нескольких последовательных дней). Хотя это нехорошо, но хуже всего то, что у нас есть другие приложения на том же веб-сайте, на которые будет влиять всякий раз, когда мы перезагружаем IIS.
Вопросы:
1. Как мы решаем эту ошибку, так как она иногда возникает, и мы не видим шаблон?
2. Существуют ли более эффективные (и бесплатные) способы обработки файлов Excel из C # / ASP.NET, кроме OleDb? (Мы предпочитаем не устанавливать MS Office на серверах, так как это не рекомендуется Microsoft)
Наши ограничения:
1. Мы застряли в формате MS Office 2003 (.xls) и не можем перейти в формат MS Office 2007 (OOXML).
2. Причины, по которым мы не используем CSV, заключаются в том, что у нас могут быть запятые в наших данных (с этим трудно справиться, даже если мы используем цитирование), и мы также используем несколько таблиц в нашей электронной таблице (этого нельзя сделать с помощью CSV) ,
Спасибо! :)
Обновление:
Спасибо Кит. Это кажется проблемой с движком Jet, но мы используем его из-за отсутствия ( free и простых в использовании) альтернатив.
Спасибо, Джо. Но у нас ограниченный бюджет - поэтому мы в основном ищем бесплатные инструменты / библиотеки.