.Net中批量更新或添加数据
方法一:使用SqlBulkCopy实现批量更新或添加数据。
SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加同样的数据,导致数据重复。这里有两种方案可实行方案,实现批量将数据更新到数据表中。如果数据存在,就更新数据;如果不存在,则添加一条新的数据
这两种方案都需要添加一个新的用作临时存储数据的表,假如有两个表 BatchTableTemp和BatchTable, SqlBulkCopy类先批量将数据添加到BatchTableTemp中,然后再将BatchTable表中不存在的数据添加到BatchTable表中,存在的数据更新到BatchTable表中
方案一:在执行完SqlBulkCopy批量将数据添加到BatchTableTemp以后,执行存储过程,BatchTable表中不存在的数据就添加Insert,存在的数据更新Update
SqlHelper代码:
//<summary>
//返回操作影响的行数
//</summary>
public static int ExcuteNonQuery( CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
SqlCommand cmd = PrepareSqlCommand(cmdType, cmdText, cmdParms);
int value = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Connection.Close();
return value;
} /// <summary>
/// 批量添加数据
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static bool ExcuteNonQuery(DataTable dt)
{
SqlConnection connection = new SqlConnection(connString);
connection.Open();
SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connection);
sqlbulkcopy.BulkCopyTimeout = ; //超时之前操作完成所允许的秒数
sqlbulkcopy.BatchSize = dt.Rows.Count; //每一批次中的行数
sqlbulkcopy.DestinationTableName = dt.TableName; //服务器上目标表的名称
for (int i = ; i < dt.Columns.Count; i++)
{
sqlbulkcopy.ColumnMappings.Add(i, i); //映射定义数据源中的列和目标表中的列之间的关系
}
sqlbulkcopy.WriteToServer(dt); // 将DataTable数据上传到数据表中
connection.Close();
return true;
}
C#执行ExcuteNonQuery(),批量添加到BatchTableTemp,然后在执行存储过程代码
DataTable table = GetDataTable("BatchTableTemp"); //获取要更新的DataTable
bool value = SqlHelper.ExcuteNonQuery(table);
if (value)
{
SqlHelper.ExcuteNonQuery(CommandType.StoredProcedure, "InsertOrUpdate", null);
}
将BatchTableTemp同步更新到BatchTable表中的存储过程代码:
ALTER procedure [dbo].[InsertOrUpdate]
as
begin
update BatchTable
set BatchTable.Column1=BatchTableTemp.Column1,
BatchTable.Column2=BatchTableTemp.Column2,
BatchTable.Column3=BatchTableTemp.Column3,
BatchTable.Column4=BatchTableTemp.Column4,
BatchTable.Column5=BatchTableTemp.Column5
from BatchTable,BatchTableTemp
where BatchTable.Gradation=BatchTableTemp.Gradation insert into BatchTable
select * from BatchTableTemp
where not exists
(select Gradation from BatchTable where BatchTable.Gradation=BatchTableTemp.Gradation)
delete BatchTableTemp
end
方案二:待续
方法二:利用表值参数(简称TVPS)批量更新(或插入)数据
待续
.Net中批量更新或添加数据的更多相关文章
- ADO.NET - 批量更新或添加数据
方法一:使用SqlBulkCopy实现批量更新或添加数据. SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加 ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- Myabtis中批量更新update多字段
在mybatis中批量更新多个字段 推荐使用如下操作: 方式1:在Dao层接口中: void updateBatch(@Param("list")List<Student&g ...
- 从源码的角度看 React JS 中批量更新 State 的策略(下)
这篇文章我们继续从源码的角度学习 React JS 中的批量更新 State 的策略,供我们继续深入学习研究 React 之用. 前置文章列表 深入理解 React JS 中的 setState 从源 ...
- mybatis中批量更新的问题
问题:使用mybatis在执批量更新操作时,一直报错执行失败 解决方法: 首先打印了SQL语句,发现SQL语句拿出来执行没问题,也可以批量执行.SQL没问题,应该是配置的问题. 在网上查询和很多资料, ...
- hibernate批量更新和删除数据
批量处理 不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过,听说 ...
- 批量更新mysql表数据
1.批量更新表中某个字段,如果表比较大,每条记录都执行一条update,1s执行10条数据,10万条数据就要1W秒,3个多小时. 2.可以用case when 来实现,模板如下 UPDATE cate ...
- 批量插入一张表的数据,并且生成不同的uuid 字符截取 批量更新 去除重复数据
INSERT INTO party_branchSELECT UUID(),m.name,m.secreta_name,m.contacts_name,m.contact_phon,m.categor ...
- mysql批量update更新,mybatis中批量更新操作
在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作.但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造 ...
随机推荐
- 【C/C++学院】(24)Oracle数据库编程--管理oracle
一.启动和停止oracle 停止和启动oracle须要切换到oracle用户才干够,其它用户都没有权限启动和停止oracle(包含root也没有权限). 1.执行sqlplus但不登录到oracle: ...
- linux 终端下敲ctrl-c时,到底发生了什么?(转)
通过telnet登录到单板,然后按ctrl-c会发生什么情况,流程是怎么样的? 在分析之前,先介绍tty的相关知识.我们可以认为,所有跟输入输出相关的操作,最终都由tty来接管.举例来说,当我们敲 l ...
- redis安装和配置教程phpredis扩展安装测试
作者:zhanhailiang 日期:2014-10-16 推荐阅读: Redis持久化策略 关于Redis很多其它资料阅读 1. 下载redis-2.8.17.tar.gz:http://downl ...
- SpringMVC注释启用
这篇文章是我学习的网络视频SpringMVC写的过程. 谢谢公布各位前辈的视频 以下评论SpringMVC几个关键步骤,注意事项启用: 首先需要加载配置文件(假设请使用自定义路径) <? xml ...
- SettingsProvider 它SettingsCache
转载请注明出处:http://blog.csdn.net/droyon/article/details/35558437 SettingsCache,如指出,SettingsProvider缓冲.这将 ...
- UML对象图和包图
UML九已经介绍过的基本图,然后,我们再来看看对象图和包图. 一.对象图 谈到对象.我们不得不说一下对象.对象(Object)是对象类的实例(Instance),用于模型化特定的实体.对象是唯一的. ...
- 修改Oracle XE Listener 占用的1521、8080端口
修改Oracle XE Listener 占用的1521.8080端口今天在帮开发人员Demon安装oracleXE时,有这么一段提示: [sql] Destination Folder: D:\ ...
- 标准差(standard deviation)和标准错误(standard error)你能解释一下?
by:ysuncn(欢迎转载,转载请注明原始消息) 什么是标准差(standard deviation)呢?依据国际标准化组织(ISO)的定义:标准差σ是方差σ2的正平方根.而方差是随机变量期望的二次 ...
- 杭州电acm理工大舞台版
我要参加全国软件设计大赛C/C++学生语言组,前一个假设<C训练和演习,并总结手>没看完,请阅读上述并根据所作的训练,然后做下面的练习. 门户:http://blog.csdn.net/l ...
- XSS学习笔记(五)-XSS防御
如果只生产XSS的地方都与输入或输出相关联的.所以错过了主要矛盾.而且,我们将有一个解决问题的办法:您可以输入端砚格过滤,是可能的过滤输出时间,输出到用户的GET或POST中是否有敏感字符: 输入过滤 ...