2009-09-01 8 views
0

La méthode suivante fonctionne bien sûr, mais après un certain nombre de téléchargements (ce n'est pas constant) mon client obtient l'erreur redoutée: "System.Data.OleDb.OleDbException: Unspecified erreur »Aidez-moi à trouver la fuite dans ce code d'importation Excel

étapes:

  1. télécharge client un fichier excel via une commande de téléchargement de fichiers
  2. fichier est enregistré dans le système de fichiers
  3. fichier est ouvert via le fournisseur OLEDB et lire en un ensemble de données

Ma seule supposition est que le fournisseur ne libère pas de ressources. La seule façon de l'effacer (temporairement) est de réinitialiser les services Internet (IIS). Pour cette raison, je suis enclin à penser que le fournisseur peut être bloqué par d'autres sites sur ce serveur. Nous hébergeons un site pour un client (nous n'avons pas construit) qui utilise ce fournisseur, il est donc possible qu'il y ait un problème de leur côté. Quelqu'un peut-il commenter cela?

S'il vous plaît jeter un oeil à la méthode ci-dessous et m'aider à me débarrasser de ce problème!

Public Shared Function GetExcelData(ByVal excelFile As String, ByVal sheetNumber As Integer) As DataSet 

    Dim connString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", excelFile) 
    Dim excelDataSet As New DataSet() 

    Using conn As New OleDbConnection(connString) 
     conn.Open() 
     Using dt As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 

      Dim excelSheets(dt.Rows.Count) As String 
      Dim i As Integer = 0 
      For Each row As DataRow In dt.Rows 
       excelSheets(i) = row("TABLE_NAME").ToString 
       i += 1 
       If i = sheetNumber Then 
        Exit For 
       End If 
      Next 

      Using excelCommand As New OleDbCommand("Select * from [" & excelSheets(sheetNumber - 1) & "]", conn) 
       Using excelAdapter As OleDbDataAdapter = New OleDbDataAdapter(excelCommand) 
        excelAdapter.Fill(excelDataSet) 
       End Using 
      End Using 

     End Using 
     conn.Close() 
    End Using 

    Return excelDataSet 

End Function 
+0

Croyez-moi Mitch, je suis épuisé google pour celui-ci. N'est-ce pas le but de ce site de toute façon, de partager l'expérience pour aider les autres à résoudre des problèmes? Je sais que j'ai répondu à un tas de questions comme celle-ci. – ScottE

+0

OK, désolé. Le classeur Excel est-il ouvert lorsque vous l'interrogez? –

+0

Je veux dire WorkSheet. –

Répondre

0

Il semble qu'il n'y a pas de solution réelle à l'aide du fournisseur OLEDB

..

Donc, je vais demander au client de convertir sa feuille de calcul en CSV (c'est possible dans ce cas car il s'agit d'une importation tabulaire à une seule feuille)

Ensuite, trouvé un analyseur CSV ici:

http://www.codeproject.com/KB/database/CsvReader.aspx

0

Je ne sais pas ce qui cause votre erreur, mais je ne sais que, étant donné le code que vous avez montré, il n'y a aucun point en boucle à travers tous les enregistrements de feuilles dans votre datatable. En outre, vous pouvez regrouper les instructions Using pour éviter l'imbrication en profondeur et la méthode .Fill() comporte des surcharges qui vous permettent de spécifier le nom de la table ou même de remplir directement une table plutôt que d'utiliser un ensemble de données entier. L'un ou l'autre de ceux-ci semblerait un meilleur choix que de simplement retourner un ensemble de données avec une seule table sans nom.

Dim sheetName As String = dt.Rows(sheetNumber)("TABLE_NAME") 

Using excelCommand As New OleDbCommand(_ 
    String.Format("Select * from [{0}]", sheetName), conn), _ 
    excelAdapter As OleDbDataAdapter = New OleDbDataAdapter(excelCommand) 

    excelAdapter.Fill(excelDataSet, sheetName) 

End Using 

En ce qui concerne votre problème, ma meilleure estimation est qu'il ya un certain caractère incorrect dans le nom de fichier qui est à l'origine des problèmes avec la chaîne de connexion.

+0

Merci pour les conseils, c'est beaucoup plus concis. Je suis sûr que ça ne résoudra pas le problème, mais on ne sait jamais! Je suis prêt à essayer n'importe quoi à ce stade. – ScottE

0

Juste après avoir comparé avec ma chaîne de connexion:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDataFile + ";Extended Properties=\"Excel 8.0;ImportMixedTypes=Text;HDR=YES;IMEX=1;\" 

bien que je suppose que le \ » ne sont pas nécessaires

Questions connexes