SQL批量添加,更新,删除
SQL语句:

存储过程:

代码:
这里说的是关于SQL的批量操作数据。
需要准备:
三层框架:利用 动软代码生成器(可以快速生成增删改查) 生成三层 Model,BLL,Dal
①DbHelpeSQL.cs ------->SQL操作的辅助类
②CommandInfo.cs -------->一个命令类
事务的方法:
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
SqlCommand cmd = new SqlCommand();
try
{ int count = ;
//循环
foreach (CommandInfo myDE in cmdList)
{
string cmdText = myDE.CommandText;
SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
PrepareCommand(cmd, conn, trans, cmdText, cmdParms); if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
{
if (myDE.CommandText.ToLower().IndexOf("count(") == -)
{
trans.Rollback();
return ;
} object obj = cmd.ExecuteScalar();
bool isHave = false;
if (obj == null && obj == DBNull.Value)
{
isHave = false;
}
isHave = Convert.ToInt32(obj) > ; if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
{
trans.Rollback();
return ;
}
if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
{
trans.Rollback();
return ;
}
continue;
}
int val = cmd.ExecuteNonQuery();
count += val;
if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == )
{
trans.Rollback();
return ;
}
cmd.Parameters.Clear();
}
trans.Commit();
return count;
}
catch
{
trans.Rollback();
throw;
}
}
}
}
①批量删除
这个使用一条SQL语句就可以完成,所以不存在批量不批量的问题
delete TableName where id in(条件) 条件格式: 1,2,3,4
例子:就是一个简单的User表 列: ID,Name.Age,Sex
②批量添加 我们使用的时候,自己手动改一下就可以了,符合自己的表
/// <summary>
/// 添加多条数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int Add(List<User> userList)
{
List<CommandInfo> strsql = new List<CommandInfo>();
foreach (User item in userList)
{
CommandInfo info = new CommandInfo();
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into User(");
strSql.Append("Name,Age,Sex)");
strSql.Append(" values (");
strSql.Append("@Name,@Age,@Sex)");
info.CommandText = strSql.ToString(); //SQL语句
SqlParameter[] parameters = {
new SqlParameter("@Name", SqlDbType.NVarChar,500),
new SqlParameter("@Age", SqlDbType.Int,4),
new SqlParameter("@Sex", SqlDbType.Int,4)};
parameters[].Value = item.Name;
parameters[].Value = item.Age;
parameters[].Value = item.Sex;
info.Parameters = parameters; //参数 strsql.Add(info); //把多条SQL语句添加进去,一起执行
}
int num = DbHelperSQL.ExecuteSqlTran(strsql); //执行事务 一定是要执行事务,多条数据的时候要么全部成功要么失败
if (num > )
{
return num;
}
else
{
return ;
}
}
③批量更新 类似更新,把SQL语句换成更新的就可以了
/// <summary>
/// 更新多条数据
/// </summary>
public bool Update(List<User> userList)
{
List<CommandInfo> strsql = new List<CommandInfo>();
CommandInfo info = new CommandInfo();
StringBuilder strSql = new StringBuilder();
foreach (User item in userList)
{
strSql.Append("update User set ");
strSql.Append("Name=@Name,");
strSql.Append("Age=@Age,");
strSql.Append("Sex=@Sex,");
strSql.Append(" where ID=@ID");
info.CommandText = strSql.ToString();
SqlParameter[] parameters = {
new SqlParameter("@Name", SqlDbType.NVarchar,500),
new SqlParameter("@Age", SqlDbType.Int,),
new SqlParameter("@Sex", SqlDbType.Int,4), new SqlParameter("@ID", SqlDbType.Int,)}; parameters[].Value = item.Name;
parameters[].Value = item.Age;
parameters[].Value = item.Sex;
parameters[].Value = item.ID;
info.Parameters = parameters;
strsql.Add(info);
}
int rows = DbHelperSQL.ExecuteSqlTran(strsql);
if (rows > )
{
return true;
}
else
{
return false;
}
}
批量数据,这个格式: ( 现实的需求里面可能批量不止是做一种操作,可能添加,删除,更新一起做的)
List<CommandInfo> strsql = new List<CommandInfo>(); //头部
//第一条命令
CommandInfo info1 = new CommandInfo();
StringBuilder strSql1 = new StringBuilder();
strSql1.Append("SQL语句,参数用@XX替代");
info1.CommandText=strSql1.ToSting();
SqlParameter[] parameters1 = {
声明类型和大小SqlParameter的集合
};
parameters1[0].Value =给每个参数赋值
info1.Parameters = parameters1; //命令的参数
strsql.Add(info1);
//第二条命令
CommandInfo info2 = new CommandInfo();
StringBuilder strSql2 = new StringBuilder();
strSql2.Append("SQL语句,参数用@XX替代");
info2.CommandText=strSql2.ToSting();
SqlParameter[] parameters2 = {
声明类型和大小SqlParameter的集合
};
parameters2[0].Value =给每个参数赋值
info2.Parameters = parameters2; //命令的参数
strsql.Add(info2);
//第三条命令 继续添加就可以了
int rows = DbHelperSQL.ExecuteSqlTran(strsql); //尾部
SQL批量添加,更新,删除的更多相关文章
- ado.net 批量添加 更新 删除
自曾列就别往下看 别折腾了 使用 SqlBulkCopy ,dataTable 必须跟sql里面的表字段完全一样 下面在sqlserver中演示 mysql 请google MySqlBulkLo ...
- Sql批量添加,批量查询,批量删除,批量修改。mybatis都有对应标签
Sql批量添加,批量查询,批量删除,批量修改.mybatis都有对应标签
- SQL批量添加主键脚本
--SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...
- PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...
- Windows批量添加和删除IP
随着天气变冷了,好多小伙伴都开始变懒了,都想用最快的方式完成任务 下面给大家介绍一下Windows批量添加和删除IP的办法 (1)批量添加IP 直接在CMD下边运行下边命令. for /l %i in ...
- EF批量添加,删除,修改的扩展
在EF各版本中,没有相应批量的添加,删除,修改,在用ORM 处理数据时直有个尴尬.在网上,也接到了很多网友的询问这方面的情况,特此今天把这方面的相关扩展分享一下,(这里只做批量删除的例子,添加和修改的 ...
- MYSQL-JDBC批量新增-更新-删除
目录 1 概述 2 开启MYSQL服务端日志 3 深入MYSQL/JDBC批量插入 3.1 从一个例子出发 3.2 JDBC的批量插入操作 3.3 两个常被忽略的问题 3.5 误区 4 MYSQL/J ...
- hive 批量添加,删除分区
一.批量添加分区: use bigdata; alter table siebel_member add if not exists partition(dt='20180401') locati ...
- SqlServer——批量操作(批量添加,删除)
批量添加数据: 一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , fir ...
随机推荐
- innosetup卸载软件后,删除定时任务schedule task
代码如下: //innosetup自带的方法,当卸载软件时,根据卸载的状态改变时而触发 procedure CurUninstallStepChanged(CurUninstallStep: TUni ...
- Hash索引和B+树索引总结
先说Hash索引 在理想的情况下,key非常分散,不存在Hash碰撞的话,采用Hash索引可以唯一得确定一个key的位置,并且这个位置上就只有一个key,所以查找时间复杂度是O(1),非常快,这是Ha ...
- PHP中break及continue两个流程控制指令解析
<?php $arr = array( 'a' => '0a0', 'b' => '0b0', 'c' => '0c0', 'd' => '0d0', 'e' => ...
- FZU 1921——栀子花开——————【线段树单点更新】
栀子花开 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- BNU4286——Adjacent Bit Counts——————【dp】
Adjacent Bit Counts Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Jav ...
- 了解WaitForSingleObject中WAIT_ABANDONED 返回值
1.互斥量内核对象 互斥量内核对象用来确保一个线程独占对一个资源的访问.互斥量对象包含一个使用计数.线程ID以及递归计数.互斥量与关键段的行为完全相同.但是互斥量是内核对象,而关键段是用户模式下的同步 ...
- 亲测,很有效的忽略SSL证书方法
1.在httpclient发起请求时,有时会出现下面这种情况 你的日志中出现有关SSL的异常,javax.net.ssl.SSLPeerUnverifiedException: peer not au ...
- HDU 5215 Cycle(dfs判环)
题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...
- Spark应用(app jar)发布到Hadoop集群的过程
记录了Spark,Hadoop集群的开启,关闭,以及Spark应用提交到Hadoop集群的过程,通过web端监控运行状态. 1.绝对路径开启集群 (每次集群重启,默认配置的hadoop集群中tmp文件 ...
- Android之自定义(上方标题随ViewPager手势慢慢滑动)
最近很蛋疼,项目要模仿网易新闻的样式去做.上次把仿网易新闻客户端的下拉刷新写出来了,这次是ViewPager的滑动,同时ViewPager的上面标题下划线跟随者移动,本来通过ViewPager的OnP ...