由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了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. hdoj 1465 不容易系列之一

    转 原文网址   http://blog.csdn.net/liwen_7/article/details/7646451 错排问题 错排问题 就是一种递推式,不过它比较著名且常用,所以要熟记! 方法 ...

  2. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...

  3. mysql繁字体报错,Incorrect string value: '\xE9_' for column 'UserName' at row 1

    mysql 插入繁体字的时候报错,然后网上找了,说是mysql的库设置为character-set = utf8mb4 结果设置还是没效果 搞了好几天都不知道什么原因,然后今天想了想,好像之前有个学长 ...

  4. mmsql 查询每个分类的前3条数据

    select * from (select *,row_number() over(partition by PropertyRoofBeamID order by PropertyRoomID de ...

  5. js showModalDialog打开新的页面给原页面传值问题

    a.html中打开一个新页面b.html,b.html页面给a.html中的input传一个值并将value赋给input框. a.html: <html>  <head>   ...

  6. java基础之synchronized使用方法

    首先.參考文章:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html PS:參考文章非常长,但内容非常丰富,若是刚開始学习 ...

  7. SQL Server数据库同步SQL

    select table_name,COLUMN_NAME,data_TYPE,CHARACTER_OCTET_LENGTH,CHARACTER_MAXIMUM_LENGTH from informa ...

  8. 使用viewpager实现广告条轮询的效果

    先上效果图: viewpager是google在v4-support包中提供的,使用时与listview类似,度需要提供一个adapter, 只不过viewpager提供的是PagerAdapter ...

  9. 谋哥:App排行榜的秘密

    App在改变世界,改变人们的生活.       如今购物大家都用淘宝.京东,吃饭你会用饭否,看天气预报你用墨迹天气,看视频用优酷.K歌你用唱吧,聊天联系你用微信,看新闻你用今日头条等等.你的生活由你自 ...

  10. 适用于cocos2dx的编辑器:Texture,Tilemap,Particle,Action,Level etc

    原文:http://www.cocos2d-x.org/wiki/Editors_for_cocos2d-x_TextureTilemapParticleActionLevel_etc Action ...