由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据
1 public static int InsertSettlementRecord(SqlConnection connection, List<InventorySettlement> model)
{
DataTable dt = GetTableSchema();
SqlBulkCopy bulkCopy = new SqlBulkCopy(connection);//实例化SqlBulkCopy对象
bulkCopy.DestinationTableName = "Tuhu_shop.dbo.InventorySettlement";//需要插入的表的表名
bulkCopy.BatchSize = dt.Rows.Count;
string sql = "SELECT MAX(BatchNo) AS BatchNo FROM Tuhu_shop.dbo.InventorySettlement WITH (NOLOCK)";
var maxBatchNo = SqlHelper.ExecuteDataTable(connection, CommandType.Text, sql).ConvertTo<InventorySettlement>().ToList();//获得当前表中的最大批次号,以后每次添加的一批数据都在当前批次上加1,
int? maxBatch = ;
if (maxBatchNo[].BatchNo == null)//对批次号的判断
{
maxBatch = ;
}
else
{
maxBatch = maxBatchNo[].BatchNo;//对批次号赋值
} foreach (var item in model)//循环向datatable中插入数据
{
DataRow r = dt.NewRow();
r[] = item.ShopId;
r[] = item.PID;
r[] = item.PName;
r[] = item.SettlementCount;
r[] = item.SettlementPrice;
r[] = item.SumMoney;
r[] = item.SettlementStatus;
r[] = maxBatch+;
r[] = DateTime.Now;
r[] = item.Settlementor;
dt.Rows.Add(r); }
foreach (DataColumn dc in dt.Columns)
{
bulkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);//使列对应,这段代码很重要,自己亲测少了这一句会插入失败
} if (dt != null && dt.Rows.Count != )
{
bulkCopy.WriteToServer(dt);//通过SqlBulkCopy一次性插入到数据库表中
return ;
}
else
{
return ;
}
} 使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
来自 <http://www.cnblogs.com/zfanlong1314/archive/2013/02/05/2892998.html>
public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
//new DataColumn("PKID",typeof(int)),
new DataColumn("ShopId",typeof(int)),
new DataColumn("PID",typeof(string)),
new DataColumn("PName",typeof(string)),
new DataColumn("SettlementCount",typeof(int)),
new DataColumn("SettlementPrice",typeof(decimal)),
new DataColumn("SumMoney",typeof(decimal)),
new DataColumn("SettlementStatus",typeof(bool)),
new DataColumn("BatchNo",typeof(int)),
new DataColumn("CreateDateTime",typeof(DateTime)),
new DataColumn("Settlementor",typeof(string))
}); return dt;
}

使用SqlBulkCopy批量插入多条数据进入表中的更多相关文章

  1. mysql命令行批量插入100条数据命令

    先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...

  2. oracle 使用occi方式 批量插入多条数据

    if (vecInfo.empty()) { ; //数据为空,不上传,不上传标志设置为1,只有0表示上传成功 } std::string strUserName = userName; std::s ...

  3. django基础之day08,利用bulk_create 批量插入成千上万条数据

    bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.p ...

  4. oracle使用一条语句批量插入多条数据

    例如我有一个test表 create table (stuid int,name varchar(20); 插入多条数据,注意不能直接使用insert into test values(1,'a'), ...

  5. 十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的

    需求是 上传Excel 读取里面的数据.根据Excel中某一个字段,与数据表中的一个字段的唯一性.然后把 Excel表中数据和数据库表中数据一次更改.本次测试一次更新31条数据. 本次测试基于帝国cm ...

  6. MySQL批量插入多条数据方便测试

    批量插入流程 数据库字段 delimiter create procedure doinsert3() begin declare i int; declare j int; ; ; ) do ins ...

  7. mysql存储过程命令行批量插入N条数据命令

    原文:http://blog.csdn.net/tomcat_2014/article/details/53377924 delimiter $$ create procedure myproc () ...

  8. Java:批量插入、修改数据到数据库中的用法

    在java中使用JDBC实现批处理的对象一般是使用PrepareStatement对象. 如何使用: Class.forName("Oracle.jdbc.driver.OracleDriv ...

  9. DropDownList 绑定数据后 插入一条不属于表中的数据

    ddlFGiftId.DataSource = dtGift; ddlFGiftId.DataTextField = "FGiftName"; ddlFGiftId.DataVal ...

随机推荐

  1. 用g++ 编译 ffmpeg 编译出现 error: 'UINT64_C' was not declared in this scope 或 missing -D__STDC_CONSTANT_MACROS

    在 libavutil/common.h 下 添加如下,即可解决 #ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#un ...

  2. POJ 3295 Tautology (构造题)

    字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...

  3. flot图插件使用

    <div id="budget-charts"></div> <script src="../../../plugins/ace/js/fl ...

  4. lua 学习笔记(一)

    lua 中的方法: 1. type("test"): 返回数据类型 2.#"zhangsan": 返回字符串的长度 3.string.gsub("字符 ...

  5. 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite

    Yonghong Z-Suite 除了提供优秀的前端BI工具之外,Yonghong Z-Suite让用户可以选购分布式数据集市来支持实时大数据分析. 对于这种百亿级的大数据案例,Yonghong Z- ...

  6. 嵌入式Linux-objdump命令的使用

    objdump命令的使用 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump -f test 显示t ...

  7. Android开发之自定义圆形的ImageView的实现

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然 ...

  8. java.util.Stack类简介

    Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用 ...

  9. struts1与struts2的区别

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  10. H5 canvas 小demo之小球的随机运动

    1:结构之html----balls.html <!DOCTYPE html> <html> <head lang="en"> <meta ...