2009-07-17 5 views
1

J'utilise ASP.NET pour lire les données dans le fichier Excel. J'utilise un contrôle de téléchargement de fichier pour lire le fichier. Je suis capable de lire les données du fichier sur mon ordinateur local, mais après avoir déployé mon code sur le serveur, lorsque j'essaie de lire le fichier à partir de l'ordinateur client, une exception est générée.FileUpload1.PostedFile.FileName lance l'exception

FileUpload1.PostedFile.FileName lève l'exception dans le serveur.

Le message d'exception est:

'D:\path in client machine\MyExcel.xls' could not be found. Check the spelling of the file name, and verify that the file location is correct. If you are trying to open the file from your list of most recently used files on the File menu, make sure that the file has not been renamed, moved, or deleted.

S'il vous plaît aider.

code:

<add key="OleDbConnection" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 
      FilePath ;Extended Properties=&quot;Excel 8.0;HDR=Yes;IMEX=1&quot;"/> 

string OleDbConnection = 
    ConfigurationManager.AppSettings["OleDbConnection"].ToString().Replace("FilePath", 
     fileUpload.PostedFile.FileName).Trim(); 

Excel.ApplicationClass xlApp = new Excel.ApplicationClass(); 
Excel.Workbooks xlWorkBooks = (Excel.Workbooks)xlApp.Workbooks; 

Excel.Workbook wb = xlWorkBooks._Open(fileUpload.PostedFile.FileName, Type.Missing, 
    false, Type.Missing, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, 
    false, Type.Missing, true); 

    string strSheetName = ((Excel.Worksheet)wb.Sheets[1]).Name.ToString(); 
    xlWorkBooks.Close(); 
    xlApp.Quit(); 

    oledbCommand = new OleDbCommand(); 
    oledbAdapter = new OleDbDataAdapter(); 
    DataSet dsExcellData = new DataSet(); 


    oledbConnection = new OleDbConnection(OleDbConnection); 
    oledbConnection.Open(); 
    oledbCommand.Connection = oledbConnection; 

    oledbCommand.CommandText = "Select * from [" + strSheetName + "$]"; 
    oledbAdapter.SelectCommand = oledbCommand; 
    oledbAdapter.Fill(dsExcellData); 
    return dsExcellData 

Salut Je posterai le code exemple que j'ai

Ajouter un contrôle de téléchargement FIE et button.On le bouton cliquez sur exécuter le code ci-dessous après avoir sélectionné le fichier la machine client.

chaîne OleDbConnection = "Fournisseur = Microsoft.Jet.OLEDB.4.0; Source de données = \" FilePath \ "; Propriétés étendues = \" Excel 8.0; HDR = Oui; IMEX = 1 \ ""; OleDbConnection = OleDbConnection.Replace ("FilePath", FileUpload1.PostedFile.FileName); Label6.Text = OleDbConnection;

 string strSheetName = "ASSET_RECV"; 
     OleDbConnection oledbConnection; 
     OleDbCommand oledbCommand; 
     OleDbDataAdapter oledbAdapter; 

     oledbCommand = new OleDbCommand(); 
     oledbAdapter = new OleDbDataAdapter(); 
     DataSet dsExcellData = new DataSet(); 

     oledbConnection = new OleDbConnection(OleDbConnection); 
     oledbConnection.Open(); 
     oledbCommand.Connection = oledbConnection; 
     //oledbCommand.CommandText = "Select * from [{0}$]"; 

     oledbCommand.CommandText = "Select * from [" + strSheetName + "$]"; // i want to find this sheet name 
     oledbAdapter.SelectCommand = oledbCommand; 
     oledbAdapter.Fill(dsExcellData); 

     oledbConnection.Close(); 
     GridView1.DataSource = dsExcellData.Tables[0]; 
     GridView1.DataBind(); 

1) Publication du projet en IIS.Try pour exécuter l'application d'une autre machine et lire les données à partir du fichier excel (à partir de l'ordinateur client).

vous obtiendrez l'erreur ci-dessous. S'il vous plaît aider.

Le moteur de base de données Microsoft Jet n'a pas trouvé l'objet 'D: \ FileName.xls'. Assurez-vous que l'objet existe et que vous épelez son nom et le nom du chemin correctement.

Répondre

1

Je pense que vous devez enregistrer le fichier avant de pouvoir l'ouvrir. Vous pouvez utiliser:

PostedFile.SaveAs() 

pour l'enregistrer sur le serveur.

Cela a-t-il été utile?

+0

Salut, Lorsque le fichier est là dans la machine cliente.Où dois-je l'enregistrer.Je veux juste lire les données dans le fichier en l'ouvrant. – Jebli

+0

Merci, vous avez raison.Nous devons enregistrer le fichier avant de le lire. – Jebli

0

Vous devez vous assurer que le fichier existe là où vous le dites. L'erreur indique qu'il ne peut pas trouver le fichier spécifié par le chemin. Assurez-vous également que votre orthographe est correcte.

+0

Salut le fichier est là dans ce chemin. Le chemin du fichier est sélectionné en utilisant le contrôle de téléchargement de fichier.SO le serveur est incapable de tracer le fichier à partir de la machine client. – Jebli

1

Pouvez-vous poster votre code de téléchargement?
devrait être quelque chose comme ça ..

<asp:FileUpload ID="batchUpload" runat="server" /> 
<asp:Button runat="server" ID="uploadButton" Text="Upload" OnClick="UploadButton_Click" /> 

protected void UploadButton_Click(object sender, EventArgs e) 
    { 
    // Server time out 50 mins.. 
    Context.Server.ScriptTimeout = 60 * 50; 

    errorLabel.Style[HtmlTextWriterStyle.Color] = "Red"; 
    if (batchUpload.PostedFile == null || batchUpload.PostedFile.ContentLength == 0) { 
     errorLabel.InnerText = "Enter a valid file"; 
     uploadButton.Enabled = true; 
     return; 
    } 
    string path = XMAppSettings.UploadsPath; 
    filePath = Path.Combine(path, batchUpload.FileName); 
    try { 
     batchUpload.SaveAs(filePath); 
    } catch (HttpException exception) { 
     errorLabel.InnerText = "Fatal error"; 
     exception.Log(); 
     return; 
    } 

Notez que le batchUpload.SaveAs(filePath)
confirmation de la sauvegarde!

En outre, puisque vous essayez d'extraire des données d'une feuille Excel, je vous suggère d'exploiter Linq sur des ensembles de données (si vous ne prévoyez pas de faire des insertions). Exceller.ApplicationClass exigera que vous faites référence à l'Excel INTEROPS

/// <summary> 
    /// Summary description for ExcelHelper. 
    /// </summary> 
    internal sealed class ExcelHelper 
    { 
    private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=Yes;\";"; 

    public static DataTable GetDataTableFromExcelFile(string fullFileName, ref string sheetName) 
    { 
     OleDbConnection objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName)); 
     DataSet dsImport = new DataSet(); 
     try { 
     objConnection.Open(); 
     DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     if ((null == dtSchema) || (dtSchema.Rows.Count <= 0)) { 
      throw new ArgumentNullException("No sheets"); 
     } 
     //Reading the first sheet name from the Excel file. 
     sheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString(); 
     new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection).Fill(dsImport); 
     } catch (Exception e) { 
     e.Log(); 
     throw; 
     } finally { 
     objConnection.Close(); 
     objConnection.Dispose(); 
     } 
     return dsImport.Tables[0]; 
    } 
    } 

puis faire des choses comme

var table = ExcelHelper.GetDataTableFromExcelFile(fileName, ref something).AsEnumerable(); 
    var rollnoList = table 
    .Where(x => !String.IsNullOrEmpty(x.Field<string>("Roll Number"))) 
    .Select(x => ExtractUser(x)); 
0

Merci pour les replies.I ont résolu le problème. L'erreur que j'ai faite, c'est que j'ai fourni le fichier FileUpload1.PostedFile.FileName en tant que chemin d'accès à la chaîne de connexion Excel. Que se passe-t-il lorsque nous déployons le code dans le serveur et essayons de lire fichier dans le chemin du serveur.

Nous devons donc enregistrer le fichier sur le serveur avant de lire le fichier et nous devons transmettre ce chemin du serveur à la chaîne de connexion Excel. Après avoir lu les données de l'Excel, vous pouvez supprimer le fichier.

Mais je ne suis pas sûr s'il y a d'autres travaux autour comme passer l'objet de fichier en tant que source de données pour la chaîne de connexion excel.

Questions connexes