2012-11-12 27 views
15

Bir web uygulamasında (ASP.NET) MySQL veritabanı üzerinde çalışıyorum. Bu uygulama üzerinden bir Excel dosyası (.xlsx) yüklemeye çalıştığımda hiçbir sorunum yok. Sorun, dosya 24904'ten fazla kayıt olduğunda başlar.Excel dosyası ASP.NET uygulamasından MySQL'e yüklenirken hata oluştu

aşağıdaki hatayı alıyorum Bu noktada

:

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

ve ilk 24.904 kayıtları yazar.

Yükü çoklu katmanlar halinde bölmeye çalıştım ve işe yaramadı.

Herhangi bir düşünce?

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

Hata hangi satırı atar? –

+4

Satır 24905'teki verilerin tanımlı üstbilgi sütunlarının dışında hiçbir harici veriye sahip olmadığını doğruladınız mı? – dhirschl

+0

dhirschl - Çizgiyi kontrol ettim ve garip bir şey yok. Onu sildim ve bir sonraki satır –

cevap

0

Ben kaç kez sayımı var eğer

yüksek bir sayıya adresinden döngü sayımı başlatmayı deneyin ve görün (ekleyebileceğiniz tablo eşleştirmeleri sayısı gibi) bir Excel sınırına ulaştığınız şüpheli Bunu, soruna neden olan verilerden ziyade yaparsınız. Belki böyle bir şey: Eğer .... sayaç değişkeni ekleyerek ...... Aralığınızı sıfırlamak ... belirli aralık için bir artıracaktır ve sıfırlayabilirsiniz

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

Sen excel dosyasını veritabanına yüklemek için LOAD DATA bir dosya sorgusunda kullanabilir. ...

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

Kaldır aralığı kullanımı Sayfa1 ve

(connExcel "[Sayfa1 $] SELECT *") Yeni System.Data.OleDb.OledbDataAdapter olarak Dim HYRKY'nin tekrar test: Sorgu için sözdizimi
0

Excel sınırı bundan daha büyük. Belirtilen aralığın dışında kalan gizli karakterler veya boşluk içeren hücreler (hata iletisi durumları gibi), hata satırlarındaki 'son' sütununun sağındaki sütunları işaretler. Bir şeyler içerdiğini göreceksiniz.

Test etmenin kolay bir yolu, yeni verilerle dolu 50.000 kayıt içeren yeni bir dosya oluştur. Bence işler bulursun.

excel

okurken

1

Ben https://github.com/ExcelDataReader/ExcelDataReader

Bu

yükleyin-Paket 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; 
    } 
deneyin ben ExcelDataReader kullanmak OLDB kullanın veya oluşturun birçok konuda beri excel etmeyin
İlgili konular