2012-11-12 7 views
15

Ich arbeite an einer Webanwendung (ASP.NET) mit einer MySQL Datenbank. Wenn ich versuche, eine Excel-Datei (.xlsx) über diese Anwendung hochzuladen, habe ich keine Probleme. Das Problem beginnt, wenn die Datei mehr als 24904 Datensätze enthält.Fehler beim Hochladen der Excel-Datei von ASP.NET-Anwendung auf MySQL

An diesem Punkt ich die folgende Fehlermeldung erhalten:

This table contains cells that are outside the range of cells defined in this spreadsheet.

und schreibt die ersten 24.904 Datensätze.

Ich habe versucht, die Last in mehreren Chargen zu teilen, und es hat nicht funktioniert.

Irgendwelche Gedanken?

Dim connExcel As New System.Data.OleDb.OleDbConnection(conStr) 
Dim cmdExcel As New System.Data.OleDb.OleDbCommand() 
Dim dt As New DataTable() 
Dim dataset As New DataSet 
Dim x As Integer = 2 
Dim y As Integer = 20001 
Dim range As String = "A" + x.ToString + ":" + "I" + y.ToString 

cmdExcel.Connection = connExcel 

If erro = 0 Then 
    Try 

     For i As Integer = 0 To 50 
      connExcel.Open() 

      dataset.Reset() 
      dataset.Clear() 

      Dim oda As New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$" & range.ToString & "]", connExcel) 
      oda.TableMappings.Add("Table", "ExcelTest") 

      oda.Fill(dataset) 
      connExcel.Close() 

      If dataset.Tables(0).Rows.Count > 0 Then 
       SendToDB(dataset) 
      Else 
       i = 50 
      End If 

      x = x + 20000 
      y = y + 20000 

      range = "A" + x.ToString + ":" + "I" + y.ToString 
     Next 

     Label7.Visible = True 
     Label7.Text = "The information has been written successfully from 0 to " + y.ToString 

    Catch ex As Exception 
     Label9.Visible = True 
     Label9.Text = "Database Error 2:" + ex.Message 
     connExcel.Close() 
    End Try 
End If 
+1

Welche Zeile wirft den Fehler auf? –

+4

Haben Sie überprüft, dass die Daten in Zeile 24905 keine externen Daten außerhalb der definierten Header-Spalten enthalten? – dhirschl

+0

dhirschl - Ich habe die Zeile überprüft und es hat nichts komisches. Ich löschte es und bekam die gleichen Probleme mit der nächsten Zeile –

Antwort

0

Ich vermute, Sie haben eine Excel-Grenze erreicht (wie die Anzahl der Tabellenzuordnungen Sie hinzufügen können)

Versuchen Sie Schleifenzählung bei einer höheren Zahl beginnen und sehen, ob es die Zählung, wie oft ist Sie tun dies eher als die Daten, die das Problem verursachen. Vielleicht so etwas wie:

Dim x As Integer = 40002 
Dim y As Integer = 60001 
0

Sie Ihren Bereich zurücksetzen ...... durch Zählvariable Hinzufügen .... erhöht es für bestimmte Bereich ... und setzen Sie es ...

0

Sie auch kann LOAD DATA in einer Dateiabfrage verwenden, um die Excel-Datei in die Datenbank zu laden. Die Syntax für die Abfrage ist:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' 
    [REPLACE | IGNORE] 
    INTO TABLE tbl_name 
    [CHARACTER SET charset_name] 
    [{FIELDS | COLUMNS} 
     [TERMINATED BY 'string'] 
     [[OPTIONALLY] ENCLOSED BY 'char'] 
     [ESCAPED BY 'char'] 
    ] 
    [LINES 
     [STARTING BY 'string'] 
     [TERMINATED BY 'string'] 
    ] 
    [IGNORE number LINES] 
    [(col_name_or_user_var,...)] 
    [SET col_name = expr,...] 
0

Remove Bereich Verwendung Sheet1 ... und erneut testen Dim oda As New System.Data.OleDb.OleDbDataAdapter ("SELECT * FROM [Sheet1 $]", connExcel)

0

Das Excel-Limit ist größer als das. Sie haben Zellen, die entweder verborgene Zeichen oder Leerzeichen enthalten, die außerhalb des angegebenen Bereichs liegen (wie die Fehlermeldung angibt). Überprüfen Sie die Spalten rechts von Ihrer letzten Spalte in den Fehlerzeilen. Ich glaube, du wirst feststellen, dass sie etwas enthalten.

Eine einfache Möglichkeit zum Testen, erstellen Sie eine neue Datei mit 50 000 Datensätze, gefüllt mit neuen Daten. Ich denke, du wirst feststellen, dass es funktioniert. seit seiner schaffen viele Ausgabe

1

Ich benutze OLDB nicht oder übertreffen, während Excel

Lesen verwende ich ExcelDataReader https://github.com/ExcelDataReader/ExcelDataReader

Probieren Sie diese

Install-Package ExcelDataReader

public static DataSet GetExcelDataSet(string filePath) 
    { 
     FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

     IExcelDataReader excelReader; 
     if (Path.GetExtension(filePath) == ".xls") 
     { 
      //Choose one of either 1 or 2 
      //1. Reading from a binary Excel file ('97-2003 format; *.xls) 
      excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
     } 
     else 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
     } 
     //Choose one of either 3, 4, or 5 
     //3. DataSet - The result of each spreadsheet will be created in the result.Tables 

     ////////DataSet result = excelReader.AsDataSet(); 

     //4. DataSet - Create column names from first row 
     excelReader.IsFirstRowAsColumnNames = true; 
     DataSet result = excelReader.AsDataSet(); 

     //5. Data Reader methods 
     //while (excelReader.Read()) 
     //{ 
     // //excelReader.GetInt32(0); 
     //} 

     //6. Free resources (IExcelDataReader is IDisposable) 
     excelReader.Close(); 
     return result; 
    }