SQL Server SqBbulkCopy 批量数据插入

 SqlBulkCopy介绍

 SqlBulkCopy位于位于命名空间System.Data.SqlClient下,主要功能是把其他数据源)的数据有效批量的导入到SQL Server表中的功能。

(数据源不限于 SQL Server;可以使用任何数据源,只要数据可以加载到 DataTable 实例或使用IDataReader 实例读取即可)

类似与 Microsoft SQL Server 包中名为 bcp 的命令行应用程序。

但是使用 SqlBulkCopy 类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQL Server数据库插入大量数据。( SqlBulkCopy 相较于 Insert 语句而言有20~40倍性能提升)

因此SqlBulkCopy在应用到大批量数据的插入时很方便。

 SqlBulkCopy实现原理

通过DataTable存储数据并批量导入到数据库

SqlBulkCopy配置选项的说明与分析:

  1. Default 对所有选项使用默认值。
  2. KeepIdentity 保留源标识值。如果未指定,则由目标分配标识值。
  3. CheckConstraints 请在插入数据的同时检查约束。默认情况下,不检查约束。
  4. TableLock 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。
  5. KeepNulls 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换
  6. FireTriggers 指定后,会导致服务器为插入到数据库中的行激发插入触发器。 默认情况下, 是不激发触发器的……
  7. UseInternalTransaction 如果已指定,则每一批批量复制操作将在事务中发生。 在一个事务中执行,要么都成功,要么都不成功

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static bool ExecuteSqlTranBulkCopy(DataTable TableName)
{
   using(SqlConnection conn = new SqlConnection("数据库连接地址")) {
    conn.Open();
    var copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, trans);
    try
    {
        copy.DestinationTableName = TableName; //对应的表名
        copy.BatchSize = TableName.Rows.Count; //对应的列数
        foreach(DataColumn item in TableName.Columns) //循环所需的列名
        {
          copy.ColumnMappings.Add(item.ColumnName, item.ColumnName);//来源列,目标列
        }
        copy.BulkCopyTimeout = 12000;
        copy.WriteToServer(TableName); //将数据写入目标表
    }
    catch (Exception ex)
    {
        throw new Exception(TableName + "---" + ex);
    }
    finally
    {
        copy.Close();
    }
}

备注: 

sqlBulkCopy.DestinationTableName:>指定数据库表名
sqlBulkCopy.BatchSize-:指定数据库表的列数
sqlBulkCopy.ColumnMappings.Add-:设置SqlBulkCopy对象的列映射,将源表的列映射到目标表的列

注意事项

  • 构建的DataTable要跟数据库表完全一致,包含自增列,排除NotMapped
  • 构建DataColumn时列名要跟表一致,类型要传实际类型,不能不传或者传object

 

posted @   邵彷  阅读(1174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示