2017-06-01 52 views
0

錯誤在於它找不到第12列。但是我已經再次檢查拼寫與數據庫中的拼寫相同。我嘗試了只有前3列的小樣本,它工作。但是當我試圖使用我需要上傳的文件時,它給出了錯誤。'System.IndexOutOfRangeException'找不到列12

我該如何解決?

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

如何獲得源表'dt'?它有你期望的23列嗎? – Dirk

+0

這是我用來獲取dt DataTable的代碼dt = new DataTable(); 使用(OleDbConnection的CON =新的OleDbConnection(的String.Format(CSV_CONNECTIONSTRING,csvPath))) { 使用(OleDbDataAdapter的DA =新OleDbDataAdapter的( 「SELECT * FROM [」 + FILE_NAME + 「]」,CON)) { DA。補(DT); }' – user8090359

+0

使用文本編輯器查看您的_File_Name_或將其作爲csv加載到Excel中。它有每列23列嗎? – Steve

回答

0

從我所看到的,SqlBulkCopy忽略空值,這應該解決問題,如果你帶回空值。

編輯:信貸伊戈爾Labutin,我沒有看到他的評論發佈之前。

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

我仍然得到相同的錯誤:( – user8090359

+0

當你設置一個斷點和調試時,你看到什麼與預期? – Seano666

+0

顯然,當我將文件名更改爲我以前用於測試時,錯誤消失了。但它出現了一個新的錯誤,即列''不允許DBNull.Value。是否意味着我需要將它們更改爲空值? – user8090359

相關問題