У нас есть приложение C # / ASP.NET (2.0), работающее на IIS 6 в Windows Server 2003 Enterprise Edition. Это приложение читает файлы Excel с помощью OleDb, но бывают случаи, когда мы получаем исключение «Неопределенная ошибка», возникающее изнутри приложения.
Файл сохраняется во временном каталоге нашим кодом загрузки файла перед открытием. Поскольку у нас включен анонимный доступ в IIS и поскольку мы также используем олицетворение в web.config, папка C: \ Windows \ Temp \ имеет соответствующие разрешения для гостевой учетной записи пользователя Интернета (IUSR_ [MachineName]), чтобы иметь возможность создавать, изменять и удалять файлы там.
Строка подключения OleDb:
Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = C: \ Windows \ Temp \ tmp123.tmp.xls;
Extended Properties = "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, но мы используем его из-за отсутствия (бесплатных и простых в использовании) альтернатив.
Спасибо, Джо. Но у нас ограниченный бюджет - поэтому мы в основном ищем бесплатные инструменты / библиотеки.