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 ...
随机推荐
- 简单的 shell 脚本 切分日志
为避免日志过大,需要按天分割日志,定时计划任务脚本如下: /data/shell/backup_yesterday_nginx_log.sh declare logs_path="/data ...
- linux下统计文本行数的各种方法(二)
上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...
- 在NuoDB上运行Asterisk
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,作者Hans362 您可能已经熟悉Asterisk,一个广泛部署的开源Telephony框架.如果你不太熟悉,你应该 ...
- CentOS初使用命令总结
最近买了一台aliyun(ECS服务器)用来学习使用,初次使用难免要走弯路.遇到一些问题好长时间解决不了,结果经人指点豁然开朗.于是乎,总结了一些新生上路经验. 首先要解决的问题是:通过PuTTY.S ...
- c#中日期的处理
DateTime.Now.ToShortDateString()//只取日期DateTime.Now.ToLongTimeString();//只取时间搞定DateTime.Now.ToShortTi ...
- 简单Java程序向实用程序的过度:二进制文件的读写
File I/O中常见的文件读写: 1.字节流读写文本文件 FileInputStream; FileOutputStream; 2.字符流读写文本文件 FileReader; FileWriter; ...
- topshelf windows服务
一 开发: 1.新建控制台程序 2.nuget下载topshelf,根据不同的net版本选择下载版本,本人4.5下载3.3.1 3.main方法中增加 HostFactory.Run(x => ...
- git添加远程库基本操作
git添加远程库的基本步骤: 1.登录github,创建一个仓库,最好和本地仓库同名 2.输入git指令,把路径改成本地仓库所在盘符,如图 (project_03是我的本地仓库名称,路径是在G盘的WW ...
- Ubuntu16.04安装Hadoop2.6+Spark1.6+开发实例
Ubuntu16.04安装Hadoop2.6+Spark1.6,并安装python开发工具Jupyter notebook,通过pyspark测试一个实例,調通整个Spark+hadoop伪分布式开发 ...
- iOS中使用RNCryptor对资源文件加密
原文:http://blog.csdn.net/chenpolu/article/details/46277587 RNCryptor源码https://github.com/RNCryptor/RN ...