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 ...
随机推荐
- 设计模式 - 代理模式(jdk)
定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问. 一.静态代理 静态代理说白了就是把原先直接调用被代理类的方法放到代理类来调用,同时 我们可以在代理类额外的添加一些操作. 接口: pac ...
- android - gradle编译错误 exit value 1,2,3总结
在使用jenkins,使用gradle编译的时候总会出现一些问题,下面是几个常见问题的解决方法. 被编译的代码或资源有问题( finished with non-zero exit value 1): ...
- NLP —— 图模型(二)条件随机场(Conditional random field,CRF)
本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...
- (转)Java里的堆(heap)栈(stack)和方法区(method)(精华帖,多读读)
[color=red][/color]<一> 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收. 引用数据类型,需要用new来创建,既在栈 ...
- (转)Spring boot——logback.xml 配置详解(三)<appender>
文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 1 appender <appender>是<configuration& ...
- android studio生成junitLibs
apply plugin: 'com.android.application'android { compileSdkVersion 24 buildToolsVersion "25.0.0 ...
- HDOJ2004-成绩转换
Problem Description 输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:90~100为A;80~89为B;70~79为C;60~69为D;0~59为E; Input ...
- 【CSS】font样式简写(转)- 不是很建议简写
一.字体属性主要包括下面几个 font-family,font-style,font-variant,font-weight,font-size,font font-family(字体族): “Ari ...
- 【Mysql】复制表结构+数据(转)
1:复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from ...
- vue获取下拉框值
vue获取下拉框的值,用vue-modle,只有点击下拉框的值才会赋值到下拉框中,初始时下拉框没有数据,而改用$event就不会出现这样的问题,下面看代码以及图解: v-model解决方式: < ...