博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlBulkCopy使用介绍以及注意事项
阅读量:5840 次
发布时间:2019-06-18

本文共 2842 字,大约阅读时间需要 9 分钟。

SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释:

Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 实例或可使用 实例读取数据。

 

要使用此类一共需要用到三个步骤:

1.初始化数据源类型,DataTable或DataRow,一般我们使用数据库中的列名作为数据源的列名;

1 DataTable dtCopy = new DataTable();2 dtCopy.Columns.Add("jhsSitid");3 dtCopy.Columns.Add("applyGoodsId");4 dtCopy.Columns.Add("ghsSitid");5 dtCopy.Columns.Add("state");6 dtCopy.Columns.Add("applyTime");
初始化DataTable

2.给数据源添加数据:

1  foreach (DataRow r in ds.Tables[0].Rows) 2             { 3                 DataRow newRow = dtCopy.NewRow(); 4                 newRow["jhsSitid"] = r["sitid"].ToString(); 5                 newRow["applyGoodsId"] = goodsId; 6                 newRow["ghsSitid"] = siteId; 7                 newRow["state"] = "0"; 8                 newRow["applyTime"] = DateTime.Now; 9                 dtCopy.Rows.Add(newRow);10             }
循环获取数据源

3.打开数据库链接,批量插入数据源数据:

1 SqlConnection conn = new SqlConnection(baseclass.connectionString); 2                 if (conn.State == ConnectionState.Closed) 3                 { 4                     conn.Open(); 5                 } 6                 SqlTransaction st = conn.BeginTransaction(); 7                 using (SqlBulkCopy sqlCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.FireTriggers, st)) 8                 { 9                     sqlCopy.DestinationTableName = "jhqq_list";10                     sqlCopy.BulkCopyTimeout = 60;11                     sqlCopy.ColumnMappings.Add("jhsSitId", "jhsSitId");12                     sqlCopy.ColumnMappings.Add("applyGoodsId", "applyGoodsId");13                     sqlCopy.ColumnMappings.Add("ghsSitId", "ghsSitId");14                     sqlCopy.ColumnMappings.Add("state", "state");15                     sqlCopy.ColumnMappings.Add("applyTime", "applyTime");16                     try17                     {18                         sqlCopy.WriteToServer(dtCopy);19                         st.Commit();20                         result = true;21                     }22                     catch (Exception ex)23                     {24                         st.Rollback();25                     }26                     finally27                     {28                         conn.Close();29                     }30                 }
批量插入到数据库

 

sqlCopy.DestinationTableName-------->为指定数据库表名

sqlCopy.BulkCopyTimeout------------->指定完成时间

sqlCopy.ColumnMappings.Add--------->指定数据库与数据源中的对应关系

另外得注意的是,sqlCopy.ColumnMappings.Add指定对应关系时,一定要注意大小写要与数据库一直,sqlCopy.ColumnMappings.Add是对大小写很敏感的,另外对应的字段个数也必须一致,否则就会出现《给定的 ColumnMapping 与源或目标中的任意列均不匹配。》错误;

 

以上是个人见解,如有理解有误的地方欢迎指出;

 

 

转载于:https://www.cnblogs.com/showme/p/SqlBulkCopy.html

你可能感兴趣的文章
SpringBoot下Redis相关配置是如何被初始化的
查看>>
为你的AliOS Things应用增加自定义cli命令
查看>>
MongoDB 创建基础索引、组合索引、唯一索引以及优化
查看>>
百度PaddlePaddle常规赛NLP赛道火热开启
查看>>
稳了!这才是cookie,session与token的真正区别
查看>>
OSChina 周二乱弹 —— 假期余额已不足!
查看>>
前端那些事之React篇--helloword
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>
netty-当一个客户端连接到来的时候发生了什么
查看>>
PHP_5.3.20 源码编译安装PHP-FPM
查看>>
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Java高级开发工程师面试考纲
查看>>
FreeMarker表达式
查看>>
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
mysql数据备份与恢复
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>