以前一直都沒用過SqlBulkCopy關鍵字進行數據插入,更沒了解過。數據庫
事因:因業務須要在數據表中添加兩列,而後將數據插入進表中spa
以前都是這樣寫的排序
dt.Columns.Add(new DataColumn("sComment", typeof(string))); 等等一一寫出索引
而後再一一賦值string
dt.Rows[i]["sComment"] = tempBill.sComment;數據
但是我將我那兩列定義好也賦了值,要麼異常要麼就不往表中插入數據。異常
一直覺得是Linq映射的問題,後來逛了下CSDN才知道 SqlBulkCopy 使用是有要求的,它不是以你所寫的列名去表中自動對應的,而是以列有索引順序與你寫的代碼中的列去對應的。如下是別人在CSDN上的回覆:co
「SqlBulkCopy不是根據表的ColumnName來匹配的,而是根據ColumnIndex匹配,
也就是說你的表 字段必須跟數據庫的表字段徹底一致(Index的排序要跟數據表的同樣)。
就算你該字段不打算給他插入值,也要建個DataColumn。包括自增ID.不須要給他值就行了」new
因而本身也將代碼中的列順序一一都與數據表順序對應起來,另外就算代碼中用不到的列名,也要在代碼中定義好寫出來只要不賦值就能夠了。要否則仍是沒法插入數據,還會報錯。