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中不会自动添加芯片 ...
随机推荐
- 网络爬虫(3)--Beautiful页面解析
前面2节中对页面内容的访问都是直接通过标签访问的,这样虽然也可以达到解析页面内容的目的,但是在网页复杂,页面结构发生变化时,爬虫就失效了.为了使爬虫能够更加鲁棒的工作,我们需要学习通过 ...
- java 中Date的格式化样式
public static void main(String[] args) { Date d = new Date(); System.out.println(d); // Date类的默认格式 T ...
- [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]
第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...
- java编程中的Java.Lang.Math类
1. Math.PI :表示的是圆周率常量: 2.Math.E :表示的是普通常量(e): 3.abs()方法: 表示取绝对值 eg1: int x = Math.abs(50L); ...
- SQL Server无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法
用windows验证方式进入Management Studio, 安全性 > 用户名 > 右击sa > 属性 > 把默认数据库选“master”
- Ext tpl 造成 store不能正确加载
最近维护别人写的代码的时候,遇到了这么个情况 找原因找到了这行代码的身上 tpl: '<tpl for="."><div ext:qtip="{name ...
- Android Service(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- [Leetcode] Container With Most Water ( C++)
题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...
- mac上访问samba服务器
打开safari输入smb://ip,回车后出现输入用户名密码对话框,若是匿名则选择作为“客人”选项 例子 smb://192.168.2.3
- 用php逐行读取文件
做个备份年纪大了,都不愿意自己思考了 $str = file_get_contents($tmpfilename);//获得内容 $arr = explode("\n",$str) ...