Nous avons une application C#/ASP.NET (2.0) s'exécutant sur IIS 6 sur Windows Server 2003 Enterprise Edition. Cette application lit les fichiers Excel en utilisant OleDb, mais il y a des cas où une exception "Unspecified Error" est générée depuis l'application.C#/ASP.NET Oledb - MS Excel lire "Erreur non spécifiée"
Le fichier est stocké dans le répertoire temporaire par notre code de téléchargement de fichier avant ouverture. Comme nous avons activé l'accès anonyme dans IIS et que nous utilisons également l'emprunt d'identité dans web.config, le dossier C: \ Windows \ Temp \ possède les droits appropriés pour que le compte d'utilisateur invité Internet (IUSR_ [NomOrdinateur]) puisse créer, modifier et supprimer des fichiers là-bas.
chaîne de connexion OleDb:
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: \ Windows \ Temp \ tmp123.tmp.xls;
Propriétés étendues = "Excel 8.0; HDR = Oui; IMEX = 1;"
[La « source de données » attribut serait au-dessus de changer pour chaque fichier.]
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()
Solution:
Jusqu'à présent, la seule solution que nous pourrions trouver était de faire une iisreset (nous Le recyclage des pools d'applications est également configuré pour se produire une fois par jour dans IIS, mais cela ne semble pas aider puisque le problème persiste parfois sur plusieurs jours consécutifs. Bien que ce ne soit pas une bonne chose à faire, ce qui l'aggrave, c'est que nous avons d'autres applications sur le même site Web qui seraient affectées chaque fois que nous réinitialiserions IIS.
Les questions:
1. Comment résoudre cette erreur, car il arrive de temps en temps et nous ne voyons pas un modèle?
2. Existe-t-il de meilleures façons (et gratuites) de traiter les fichiers Excel de C#/ASP.NET en dehors de OleDb? (Nous préférons ne pas installer MS Office sur les serveurs car il est pas recommandé par Microsoft)
Nos limites:
1. Nous sommes coincés avec le format MS Office 2003 (.xls) et ne peut se déplacer à la MS Office 2007 (OOXML) format.
2. Les raisons pour lesquelles nous n'utilisons pas CSV sont parce que nous pouvons avoir des virgules dans nos données (c'est une douleur à traiter même si nous utilisons des citations) et nous utilisons également plusieurs feuilles de calcul dans notre tableur (cela ne peut pas être fait CSV).
Merci! :)
Mise à jour:
Merci, Keith. Cela semble être un problème avec le moteur Jet, mais nous l'utilisons en raison de l'absence de (libre et facile à utiliser) alternatives.
Merci, Joe. Mais nous avons un budget limité - nous cherchons donc principalement des outils/bibliothèques gratuits.