首页 > 数据库 >sql server sqlbulkcopy 批量数据插入数据库

sql server sqlbulkcopy 批量数据插入数据库

时间:2023-08-14 20:44:56浏览次数:42  
标签:批量 sqlbulkcopy 数据库 TableName SqlBulkCopy server 插入 sql copy

 SqlBulkCopyOptions介绍

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

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

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

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

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

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

实现代码:

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,数据库,TableName,SqlBulkCopy,server,插入,sql,copy
From: https://www.cnblogs.com/shaopang/p/17629664.html

相关文章

  • Hedisql基本操作
    要求HeidiSQL在Windows10和11上运行良好(在Windows7+8上运行有一些小问题)。目前在Wine上运行HeidiSQL相当不稳定。安装HeidiSQL的正常方法是从下载页面下载发行版安装程序。安装后,您可以直接从下载页面或通过HeidiSQL本身下载夜间版......
  • Hive SQL 的 ntile 分组切片函数
    HiveSQL的ntile函数用于将分组数据按照顺序切分成n组,并返回当前切片值。如果切片不均匀,默认增加第一个切片的分布。它把有序的数据集合「平均分配」到指定的数量(n)个桶中,将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。语法......
  • sql注入基础
    什么是注入?通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令,从而进一步得到相应的数据信息通过构造一条精巧的语句,来查询到想要的信息注入分类按照查询字段分为:字符型当输入的参数为字符串时,称为字符型数字型......
  • 高频SQL 50题(基础版): 进店却未进行过交易的顾客 | 2023-08-14
    问题表:Visits+-------------+---------+|ColumnName|Type|+-------------+---------+|visit_id|int||customer_id|int|+-------------+---------+visit_id是该表中具有唯一值的列。该表包含有关光临过购物中心的顾客的信息。表:Transact......
  • 使用Navicate 登录SQL server时 报错 建立连接时出现与网络相关的或特定于实例的错误
    1.先查看是否允许远程连接:右键-属性-连接-允许远程连接到此服务器2.若不行的话,再检查SqlServer网络配置里面的SQLEXPRESS的协议-TCP/IP是否启用;3.启用TCP/IP协议之后,右键-属性-IP地址-找到本机ip-设置1433端口......
  • sql service行转列
    PIVOT的一般语法:SELECT[新表字段1,2,3…]FROM[原表名]AS[原表别名]PIVOT([聚合函数]([原表字段1])FOR[原表字段2]IN([原表2值1],[原表字段2值2]…))AS[新表别名]语法解释:1、PIVOT必须列举[原表字段2的值],列举的值必须用中括号[]包含起来,就算是字符串类型也不需......
  • MySQL数据库不可不学的一个数据库福利来了
    Spring常用注解redis视频集合,看完这些别说不会redis代码资料.zip代码资料解压密码:wosn.net第1章数据库简介-8-1[wosn.net].mp4第3章SQL语句规范-8-3[wosn.net].mp4第2章数据库的安装及配置-8-2.mp4第4章数据库的相关操作-8-4.mp4第10章测试字符串类型-8-10[wosn.net].mp4第11......
  • 在postgresql数据库中如何实现Oracle中dblink功能
    转:https://blog.csdn.net/weixin_73350116/article/details/131905912引言在Oracle中常常有dblink功能,可以通过dblinks实现不同地址下得oracle数据库得数据交互。dblink是Oracle独有得功能,其他数据库有吗?当然,在postgresql也可以通过fdw实现与其他数据库进行数据交互,并且相较于O......
  • mysql 加索引
    1.PRIMARY  KEY(主键索引)    mysql>ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY(  `column`  ) 2.UNIQUE(唯一索引)      mysql>ALTER  TABLE  `table_name`  ADD  UNIQUE(`column`) 3.INDEX(普通索引)    mysql>ALTER ......
  • 一文玩转MQTT (ESP8266 DHT11 MQTT MYSQL方案)
    本文我们来聊一聊esp8266利用mqtt协议进行通信。并将数据数据存入数据库的操作。关于MQTTMQTT(消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。搭建MQTT服务器......