SqlBulkCopy 批量insert
1.获取要插入的数据datatable
/// <summary>
/// 从FMS取银行信息
/// </summary>
/// <returns></returns>
public void GetBankInfoFromFMS()
{
try
{
string connectionStr = Tool.GetConnectionStrings("BPMConnection");
BudgetServerClient client = new BudgetServerClient();
BankInfoRequest request = new BankInfoRequest();
request.PageIndex = ;
request.PageSize = int.MaxValue;
var response = client.QueryBankInfo(request);
if (response != null && response.total > && response.data != null && response.data.Count > )
{
//先删除
string sql = "delete from BPM_ExternalSupplier_BankInfo";
SqlHelper.ExecuteNonQuery(connectionStr, sql); //准备要批量插入的数据
DataTable table = new DataTable();
table.Columns.Add("ID");
table.Columns["ID"].DataType = typeof(Guid);
table.Columns.Add("Pkid");
table.Columns.Add("BankName");
table.Columns.Add("BankNum");
table.Columns.Add("Province");
table.Columns.Add("Citye");
table.Columns.Add("CreateUser");
table.Columns.Add("CreateTime");
table.Columns.Add("ModifiedUser");
table.Columns.Add("ModifiedTime");
table.Columns.Add("IsDeleted");
table.Columns["IsDeleted"].DataType = typeof(bool);
foreach (var item in response.data)
{
DataRow row = table.NewRow();
row["ID"] = Guid.NewGuid();
row["Pkid"] = item.Pkid;
row["BankName"] = item.BankName;
row["BankNum"] = item.BankNum;
row["Province"] = item.Province;
row["Citye"] = item.Citye;
row["CreateUser"] = "xuguanghui";
row["CreateTime"] = DateTime.Now;
row["ModifiedUser"] = "xuguanghui";
row["ModifiedTime"] = DateTime.Now;
row["IsDeleted"] = ;
table.Rows.Add(row);
}
SqlHelper.BulkCopyData(table, connectionStr, "BPM_ExternalSupplier_BankInfo");
}
}
catch (Exception ex)
{
Tool.SendErrorNotication("系统错误通知", "从FMS取银行信息GetBankInfoFromFMS方法错误,错误消息:" + ex.Message);
}
}
2.调用SqlBulkCopy
/// <summary>
/// 批量写入
/// </summary>
/// <param name="sourceTable">数据源</param>
/// <param name="connStr">数据库连接串</param>
/// <param name="destinationTableName">目标表</param>
public static void BulkCopyData(DataTable sourceTable, string connStr, string destinationTableName)
{
SqlBulkCopy sbc = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction);
sbc.BulkCopyTimeout = ;
try
{
sbc.DestinationTableName = destinationTableName;
foreach (DataColumn dc in sourceTable.Columns)
{
sbc.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
sbc.WriteToServer(sourceTable);
}
catch
{
//The SqlBulkCopy object is automatically closed at the end of the using block.
//可以不写,会自动关闭
sbc.Close();
}
finally
{
//The SqlBulkCopy object is automatically closed at the end of the using block.
//可以不写,会自动关闭
sbc.Close();
}
}
SqlBulkCopy 批量insert的更多相关文章
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- EntityFramework批量Insert
先说解决办法:使用SqlBulkCopy. 然后问题是:这个和EF没有半点关系,还要拼DataSet. 再是解决办法:你可以自己封装一个,也可以使用人家写好的 EntityFramework.Bulk ...
- 【ADO.NET】SqlBulkCopy批量添加DataTable
使用事务和SqlBulkCopy批量插入数据 SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据 ...
- C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据
C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...
- sql server 使用SqlBulkCopy批量插入数据库
sql server sqlbulkcopy 批量数据插入数据库使用的是System.Data.SqlClient中的 SqlBulkCopy批量数据插入数据库 sql server 使用SqlBul ...
- java批量insert入mysql数据库
mysql 批量insert语句为 insert into Table_(col1,col2...) values(val11,val12...),(val11,val12...),...; java ...
- SqlBulkCopy 批量复制数据到数据表
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...
- JDBC批量Insert深度优化(有事务)
环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: 执行10万次Insert语句,使用不同方 ...
- SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...
随机推荐
- Java的基本数据类型和运算
编码 ASCII--0~127 65-A 97-a 西欧码表---ISO-8859-1---0-255---1个字节 gb2312----0-65535---gbk---2个字节 Unicode编 ...
- SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰
本文出处:http://www.cnblogs.com/wy123/p/7190785.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- 关于abp中使用的sweetalert对话框组件的confirm确认对话框中的一个坑
今天修改了一个功能,限制删除用户,在删除的时候不满足条件的时候提示用户原因,使用的sweet alert组件. abp框架前端集成了sweet alert 对http请求的error做了全局处理,我在 ...
- linux自动化创建补丁
BUS #!/bin/sh #判断H5_BD_${BD_data}目录是否存在 BD_data=$(date +"%F") #当日打包多次的情况下,初始化补丁目录 if [ -d ...
- 【CSS3】使用CSS3线性渐变实现图片闪光划过效果(转)
原文:http://www.nowamagic.net/librarys/veda/detail/2600 资料参考: http://www.cnblogs.com/lhb25/archive/201 ...
- lnk后缀名打开方式
老娘栽了两次!! 前段时间,设计把设计图发给我,竟然是个后缀"exe"的文件,选择打开方式的时候忘记取消下图勾选: 结果懵逼了... 在网上找了个方法: 1.打开电脑"运 ...
- 流畅python学习笔记:第十五章:上下文管理器
在开始本章之前,我们首先来谈谈try-excep..final模块.在Python中,进行异常保护的最多就是用try..except..final.首先来看下下面的代码.进行一个简单的除法运算.为了防 ...
- Typescript 解构 、展开
什么是解构.展开? 展开与解构作用相反,简单来说: 解构:解构赋值允许你使用数组或对象字面量的语法,将数组和对象的属性付给各种变量. 展开:允许你讲一个数组展开为另一个数组,或一个对象展开为另一个对象 ...
- JavaScript数组遍历(迭代)方法 8种
最近工作中经常涉及到数据的处理,数组尤其常见,经常需要对其进行遍历.转换操作,网上的文章零零散散,不得已自己又找出红宝书来翻出来看,顺便记一笔,便于以后查询. 数组常用的方法 ECMAScript5为 ...
- java解析xml汇总(转自倾城幻影-Java解析xml汇总,链接:http://www.cnblogs.com/jiugehuanying/archive/2012/01/12/2320058.html)
[引言] 目前在Java中用于解析XML的技术很多,主流的有DOM.SAX.JDOM.DOM4j,下文主要介绍这4种解析XML文档技术的使用.优缺点及性能测试. [一.基础知识--扫盲] sax.do ...