備忘錄——關於SqlBulkCopy批量插入數據的注意事項

備忘錄——關於SqlBulkCopy批量插入數據的注意事項

0. 關於列順序

  • SqlBulkCopy不是根據表的ColumnName來匹配的,而是根據ColumnIndex匹配

    • 所以Datatable的列順序必須和數據庫表中的列的順序一致
    • Datatable中列和Table中列從前往後對應,數據庫中的Table列可以比Datatable多
    • 若是需要插入的列的中間某一列不需要插入,也需要在Datatable中顯示的構造出來,不賦值即可
  • SqlBulkCopy可以顯示的設定Datatable也表Table中的列的映射關係

    • 使用:SqlBulkCopyColumnMapping
    • 我的使用場景非常單一,還是儘量構造與Table一直的Datatable對象吧

1. 關於自增主鍵的處理

  • 方法1:可以將自增主鍵放在最後一列,此時批量插入的Datatable不需要插入該列

  • 方法2:Datatable 需要添加該自增主鍵列,但是不需要賦值

2.關於字段類型

  • Datatable中列的類型,若是動態構造Datatable,需要顯示的設置列的類型,和數據中字段類型一致

3.簡單的批量插入方法

/// <summary>
/// 使用SqlBulkCopy將DataTable中的數據批量插入數據庫中
/// </summary>
/// <param name="dbTableName">數據庫中對應的表名</param>
/// <param name="dtData">數據集</param>
public static void SqlBulkCopyInsert(string dbTableName, DataTable dataTable)
{
    using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(GetConnection()))//引用SqlBulkCopy
    {
        sqlRevdBulkCopy.DestinationTableName = dbTableName;//數據庫中對應的表名
        sqlRevdBulkCopy.NotifyAfter = dataTable.Rows.Count;//有幾行數據
        sqlRevdBulkCopy.WriteToServer(dataTable);//數據導入數據庫
        sqlRevdBulkCopy.Close();//關閉連接
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章