备忘录——关于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();//关闭连接
    }
}
posted @ 2024-03-19 15:48  shanzm  阅读(145)  评论(0编辑  收藏  举报
TOP