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