2008-09-18 6 views
3

J'ai une application qui télécharge un fichier Excel .xls dans le système de fichiers, ouvre le fichier avec un objet oledbconnection en utilisant la méthode .open() sur l'instance de l'objet puis stocke les données dans une base de données. Le téléchargement et l'écriture du fichier sur le système de fichiers fonctionne correctement, mais une erreur se produit lorsque j'essaie d'ouvrir le fichier sur notre serveur de production seulement. L'application fonctionne correctement sur deux autres serveurs (serveurs de développement et de test).OLEDBConnection.Open() génère 'Erreur non spécifiée'

Le code suivant génère une «erreur non spécifiée» dans le message d'exception.

Quote:

 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); 
     } 

: Fin Citation

de c du serveur: \\ temp et c: \ Documents and Settings \\ aspnet \ Local Settings \ Temp à la fois donner \ aspnet contrôle total.

Je crois qu'il existe un certain type de problème d'autorisations, mais ne semble pas pouvoir trouver de différence entre les autorisations sur les dossiers notés et le dossier/répertoire dans lequel le fichier Excel est téléchargé. Le même emplacement est utilisé pour enregistrer le fichier et l'ouvrir et les méthodes fonctionnent sur mon poste de travail et deux serveurs Web. Serveurs Windows 2000 SP4.

Répondre

0

Rien dans l'exception interne? Est-ce une application 64 bits? Les fournisseurs OLEDB ne fonctionnent pas en 64 bits. Vous devez avoir votre application cible x86. J'ai trouvé ceci lors d'une erreur en essayant d'ouvrir la base de données d'accès sur mon ordinateur 64 bits.

-1

J'ai obtenu cette erreur sur les choses d'autorisations, mais il semble que vous avez couvert. Je l'ai aussi vu avec l'un des drapeaux de la chaîne de connexion - vous pourriez jouer avec ça un peu.

+0

Vraiment? Cette réponse a résolu votre problème? – juan

0

Yup. Je l'ai fait aussi. J'ai sorti IMEX = 1, retiré les propriétés étendues, etc. J'ai réussi à le casser sur les serveurs de développement et de test. :) Je les ai mis dans un à la fois jusqu'à ce qu'il soit fixé sur le dev et test encore, mais toujours pas de travail sur prod.

0

Essayez d'envelopper l'emplacement entre guillemets simples

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'"); 
3

Alors que la question des autorisations peuvent être plus fréquents, vous pouvez également rencontrer cette erreur de système de fichiers Windows/accès DB Jet limites de connexion du moteur, 64/255 je pense. Si vous supprimez 255 connexions simultanées en lecture/écriture Access ou la limite de connexion 64 (?) Par processus, vous pouvez obtenir exactement la même erreur. Au moins, j'ai trouvé cela dans une application où les connexions étaient continuellement créées et jamais correctement fermées. Un simple Conn.close(); a chuté et la vie était bonne. J'imagine qu'Excel pourrait avoir des problèmes similaires.

+0

En note: 'Conn.Dispose()' ne ferme apparemment pas la connexion. – Residuum

0

Si vous utilisez l'emprunt d'identité, vous devez donner l'autorisation à l'utilisateur d'emprunt d'identité au lieu de/en plus de l'utilisateur aspnet.

Questions connexes