1

J'ai une application web ASP.NET qui a un contrôle fileupload pour permettre aux utilisateurs de télécharger un fichier Excel à lire.Lire un excel envoyé par le biais FileUpload

J'utilise une OleDBConnection et j'ai l'impression que ma chaîne de connexion ou ma chaîne de requête est erronée car l'application continue de me lancer des OleDBExceptions (ouch!). Quel serait un bon moyen d'enregistrer ou d'accéder aux fichiers téléchargés?

est ici la chaîne de connexion:

olcon.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileupFile.FileName) + ";Extended Properties=Excel 12.0"; 

Chaîne de requête:

OleDbCommand olcmd = new OleDbCommand("SELECT * FROM [Sheet1$]", olcon); 

Répondre

0

Je soupçonne que la question est enracinée dans l'appel à Server.MapPath(fileupFile.FileName). La propriété FileName est une propriété de commodité permettant d'indiquer le nom de fichier d'origine du contenu téléchargé sur le serveur. Il n'indique pas nécessairement l'emplacement ou le nom du fichier lorsque (et si) vous l'enregistrez sur le serveur.

Il semblerait que vous ayez toujours besoin de recevoir le fichier côté serveur et de l'enregistrer sur le disque. Il y a plusieurs façons de le faire. La méthode SaveAs() est peut-être la plus simple, mais vous avez également les propriétés FileBytes et FileContent qui vous permettent d'accéder au fichier téléchargé sous la forme d'un tableau d'octets ou d'un flux, respectivement.

Si vous enregistrez d'abord le document sur votre disque dur, puis construisez votre chaîne de connexion, je crois que cela va résoudre le problème.

Voici un exemple simple d'enregistrement d'un fichier téléchargé. On suppose que le dossier « ~/Documents » a accordé les autorisations d'écriture de processus de travail IIS (ou que vous utilisez l'usurpation d'identité et votre utilisateur authentifié dispose des autorisations d'écriture):

var targetfilepath = Path.Combine(Server.MapPath(~/Documents), fileupFile.FileName); 
fileupFile.SaveAs(targetfilepath); 

var connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetfilepath + ";Extended Properties=Excel 12.0"; 
// ... 

Bonne chance.

Par ailleurs, et vous savez peut-être, il y a une excellente référence sur les propriétés de chaîne de connexion Excel 2007 à connectionstrings.com: http://connectionstrings.com/excel-2007

+0

Merci! Je l'ai ajusté légèrement en retirant le "~/Documents" dans le chemin targetfile et en mettant dans le fileupFile.FileName. Voici ce que c'est maintenant: var targetfilepath = Path.Combine (Server.MapPath (fileupFile.FileName)); – loreedee