SqlBulkCopy使用介绍以及注意事项
SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释:
Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
要使用此类一共需要用到三个步骤:
1.初始化数据源类型,DataTable或DataRow,一般我们使用数据库中的列名作为数据源的列名;
DataTable dtCopy = new DataTable();
dtCopy.Columns.Add("jhsSitid");
dtCopy.Columns.Add("applyGoodsId");
dtCopy.Columns.Add("ghsSitid");
dtCopy.Columns.Add("state");
dtCopy.Columns.Add("applyTime");
初始化DataTable
2.给数据源添加数据:
foreach (DataRow r in ds.Tables[].Rows)
{
DataRow newRow = dtCopy.NewRow();
newRow["jhsSitid"] = r["sitid"].ToString();
newRow["applyGoodsId"] = goodsId;
newRow["ghsSitid"] = siteId;
newRow["state"] = "";
newRow["applyTime"] = DateTime.Now;
dtCopy.Rows.Add(newRow);
}
循环获取数据源
3.打开数据库链接,批量插入数据源数据:
SqlConnection conn = new SqlConnection(baseclass.connectionString);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlTransaction st = conn.BeginTransaction();
using (SqlBulkCopy sqlCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.FireTriggers, st))
{
sqlCopy.DestinationTableName = "jhqq_list";
sqlCopy.BulkCopyTimeout = ;
sqlCopy.ColumnMappings.Add("jhsSitId", "jhsSitId");
sqlCopy.ColumnMappings.Add("applyGoodsId", "applyGoodsId");
sqlCopy.ColumnMappings.Add("ghsSitId", "ghsSitId");
sqlCopy.ColumnMappings.Add("state", "state");
sqlCopy.ColumnMappings.Add("applyTime", "applyTime");
try
{
sqlCopy.WriteToServer(dtCopy);
st.Commit();
result = true;
}
catch (Exception ex)
{
st.Rollback();
}
finally
{
conn.Close();
}
}
批量插入到数据库
sqlCopy.DestinationTableName-------->为指定数据库表名
sqlCopy.BulkCopyTimeout------------->指定完成时间
sqlCopy.ColumnMappings.Add--------->指定数据库与数据源中的对应关系
另外得注意的是,sqlCopy.ColumnMappings.Add指定对应关系时,一定要注意大小写要与数据库一直,sqlCopy.ColumnMappings.Add是对大小写很敏感的,另外对应的字段个数也必须一致,否则就会出现《给定的 ColumnMapping 与源或目标中的任意列均不匹配。》错误;
以上是个人见解,如有理解有误的地方欢迎指出;
SqlBulkCopy使用介绍以及注意事项的更多相关文章
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Windows Server 2012 NIC Teaming 网卡绑定介绍及注意事项
Windows Server 2012 NIC Teaming 网卡绑定介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Window ...
- richface的配置、用法介绍和注意事项
richface的配置.用法介绍和注意事项一.RichFaces (3.1.x) 技术需求 1.JDK 1.5 或更高版本: 2.支持的 JSF 实现: Sun JSF 1.1 RI - 1.2 My ...
- STC8H开发(四): FwLib_STC8 封装库的介绍和注意事项
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- Excel 快速填充功能介绍以及注意事项
快速填充 快速填充可以让我们以某种格式来填充单元格. 用"姓氏+职位"格式来快速地填充下面表格中第三列.在第一个单元格内输入"李书记",选中需要被填充的其他单元 ...
- NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?
前言 近几天的几篇文章讲的内容非前面内容如系列的讲解,这几天文章都是我在项目中遇到的问题以及重新学习的知识,所以和大家分享一下,关于SQLite的文章多如牛毛,但是有些大多已经过时,为什么说过时,之前 ...
- c#中关于string的特性介绍以及注意事项
前言 string类型在我们实际项目开发中是一个最使用的类型,string是一个引用类型这一点大家都知道,但是在实际使用过程中,大家会发现string和我们常见的引用类型使用还真不一样,看下面的一个简 ...
- 第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]
Learn Android Studio 汉化教程 Let’s reset even further to remove all traces of your work on the deprecat ...
- STM32学习笔记 —— 0.1 Keil5安装和DAP仿真下载器配置的相关问题与注意事项
Keil5安装的注意事项 安装细节在此不再做过多赘述,主要介绍一下注意事项: 安装路径中不能有中文. ARM的Keil的路径不能与51的Keil的有冲突,必须将目录分开. Keil5中不会自动添加芯片 ...
随机推荐
- 不同浏览器对URL最大长度的限制(转)
1.今天碰到一个bug,window.open后面的页面,接收参数不全,导致后台报错.实验了一下.发现是使用get方法请求服务器时,URL过长所致 微软官方的说明: http://support.mi ...
- 01 日志组件XLog
本文地址为:http://www.cnblogs.com/ADTL/p/5357259.html XLog为XCode的日志组件,为系统基本功能. 使用示例: 1.新建WinForm程序 2.引用Ne ...
- Java线程状态:BLOCKED与WAITING的区别
Doc说明: /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked ...
- Unix is 命令
输入正整数n以及n个文件名,排序后按列优先的方式左对齐输出.假设最长文件名有M字符,则最右列有M字符,其他列都是M+2字符. 附加条件每行最多输出60个字符,在此条件下要求行最少. Sample in ...
- stl学习之字符串
其实string也是stl里面的内容,记录几点自己不常用的内容 1.at方法(比[]会判断是否越位) 2. int copy(char *s, int n, int pos=0) const; 把当前 ...
- (转)android ndk 给结构体赋值的方法
转自:http://www.cnweblog.com/fly2700/archive/2012/03/21/320083.html 1,java 代码 结构体定义 public class Media ...
- js 函数声明与函数表达式
1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2: 3: ...
- Log4Net 的简要配置
引用log4net.dll AssemblyInfo.cs中 [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyF ...
- Python之路第十二天,高级(4)-Python操作rabbitMQ
rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...
- webservice 技术改进
Webservice 技术改进 1.不同系统不同语言之间的交互 基于http协议进行传输,使用REST服务实现WS 2.不同系统相同语言之间的交互 使用RPC(romate process call) ...