2017-06-01 3 views
0

Der Fehler ist, dass es Spalte 12 nicht finden kann. Aber ich habe bereits überprüft, dass die Rechtschreibung die gleiche wie die in der Datenbank ist. Ich habe versucht, eine kleine Probe wie nur die ersten 3 Spalten, es hat funktioniert. Aber als ich versuchte, die Datei zu verwenden, die ich hochladen musste, gab es den Fehler.'System.IndexOutOfRangeException' Spalte 12 kann nicht gefunden werden

Wie behebe ich es?

DataTable dt = new DataTable(); 
using (OleDbConnection con = new OleDbConnection(string.Format(CSV_CONNECTIONSTRING, csvPath))) 
{ 
    using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM ["+File_Name+"]", con)) 
    { 
     da.Fill(dt); 
    } 
} 

try 
{ 
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConString)) 
    { 
     bulkCopy.ColumnMappings.Add(0, "medicine_id"); 
     bulkCopy.ColumnMappings.Add(1, "category_id"); 
     bulkCopy.ColumnMappings.Add(2, "subcategory_id"); 
     bulkCopy.ColumnMappings.Add(3, "med_name"); 
     bulkCopy.ColumnMappings.Add(4, "brand"); 
     bulkCopy.ColumnMappings.Add(5, "form_id"); 
     bulkCopy.ColumnMappings.Add(6, "poison_schedule"); 
     bulkCopy.ColumnMappings.Add(7, "strength"); 
     bulkCopy.ColumnMappings.Add(8, "image"); 
     bulkCopy.ColumnMappings.Add(9, "quantity"); 
     bulkCopy.ColumnMappings.Add(10, "unit"); 
     bulkCopy.ColumnMappings.Add(11, "threshold"); 
     bulkCopy.ColumnMappings.Add(12, "price"); 
     bulkCopy.ColumnMappings.Add(13, "manufacturer"); 
     bulkCopy.ColumnMappings.Add(14, "special_instructions"); 
     bulkCopy.ColumnMappings.Add(15, "active1"); 
     bulkCopy.ColumnMappings.Add(16, "active1_strength"); 
     bulkCopy.ColumnMappings.Add(17, "active2"); 
     bulkCopy.ColumnMappings.Add(18, "active2_strength"); 
     bulkCopy.ColumnMappings.Add(19, "active3"); 
     bulkCopy.ColumnMappings.Add(20, "active3_strength"); 
     bulkCopy.ColumnMappings.Add(21, "active4"); 
     bulkCopy.ColumnMappings.Add(22, "active4_strength"); 

     bulkCopy.DestinationTableName = "medicine"; 
     bulkCopy.BatchSize = dt.Rows.Count; 
     bulkCopy.WriteToServer(dt); 
     bulkCopy.Close(); 
    } 
} 
catch (System.Exception ex) 
{ 
    throw ex; 
} 
+1

Wie erhalten Sie die Quellentabelle 'dt'? Hat es die 23 Spalten, die Sie erwarten? – Dirk

+0

Dies ist der Code, den ich verwendet habe, um dt DataTable dt = new DataTable() zu bekommen; Verwendung (OleDbConnection con = new OleDbConnection (string.Format (CSV_CONNECTIONSTRING, csvPath))) { Verwendung (OleDbDataAdapter da = new OleDbDataAdapter ("SELECT * FROM [" + File_Name + "]", con)) { da. Füllen (dt); } ' – user8090359

+0

Betrachten Sie Ihren _File_Name_ mit einem Texteditor oder laden Sie es in Excel als CSV. Hat es für jede Zeile 23 Spalten? – Steve

Antwort

0

Von dem, was ich sehe, SqlBulkCopy nulls ignoriert, das das Problem lösen soll, wenn Sie Nullwerte zurückzubringen.

Edit: Kredit an Igor Labutin, ich sah seinen Kommentar nicht vor dem Posten.

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConString, SqlBulkCopyOptions.KeepNulls)) 
+0

ich bekomme immer noch den gleichen Fehler :( – user8090359

+0

Und wenn Sie einen Haltepunkt setzen und debuggen, was sehen Sie vs was erwartet wird? – Seano666

+0

anscheinend, als ich den Dateinamen auf den einen, den ich zuvor zum Testen verwendet, geändert wurde, war der Fehler verschwunden. aber es kam ein neuer Fehler heraus, der Spalte '' DBNull.Value nicht erlaubt. Bedeutet das, dass ich sie in Nullen ändern muss? – user8090359

Verwandte Themen