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中不会自动添加芯片 ...
随机推荐
- [J2EE学习][post,get乱码处理]
post乱码 通过flitter过滤(原理待未来好好学习) <!-- post乱码过虑器 --> <filter> <filter-name>CharacterEn ...
- win7 AnkhSVN 安装报错
重装系统后,需要安装AnkhSVN,结果一直报如下错误 An error occurred during the installation of assembly"Microsoft.VC8 ...
- 学习使用Vim(一)
今天下定决心要逐渐脱离IDE的"comfortable zone",学习使用Vim.以前偶尔使用Vim的经历都是很痛苦的,觉得各种不方便和命令复杂难懂.但既然那么多书都推荐使用Vi ...
- OpenCV——常用函数查询
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
- (原)ubuntu16中简单的使用google的protobuf
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5804395.html 参考网址: http://www.cnblogs.com/luosongchao ...
- 查文件大小列表 MySQL问题
du -sh /* | sort -nr 打开网站发现Too many connections The server quit without updating PID file (/usr/loca ...
- MySQL--连接属性
The capability flags are used by the client and server to indicate which features they support and w ...
- 折腾gnome3.4
1.平埔式窗口管理器shellshape 刚开始用都是登录时默认为gnome classic,主要是希望有任务栏,但是为了在这种模式,gnome扩展都没有用了. 而我又在使用shellshape -- ...
- 深入理解JS原型链与继承
我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...
- DeflateStream类
DeflateStream是另外一种压缩与解压缩流,使用方法与GZipStream类似,而且压缩之后的带下也差不多. 一.属性 BaseStream 获取对基础流的引用. CanRead 获取一个值 ...