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 ...
随机推荐
- java collection与数组(Array)互转
先确定几个概念,这里说的数组元素,除基本类型数组外,并非指元素对象本身,而是它们的引用.换句话说,基本数组的元素是数值本身,非基本数组的元素都是一个地址(对应指针). 1.collection的元素不 ...
- 深入理解JavaScript系列(14):作用域链(Scope Chain)
前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量.函数声明和函数的形参)作为属性存储在变量对象中. 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出 ...
- csharp: DataTable结构相同的比较
) ) * pageSize; ; i++) { DataRow newdr = newdt.NewRow(); DataRow dr = dt.Rows[i]; foreach (Dat ...
- sql and csharp: Split Function
T-SQL: declare @int int,@prov int,@city int,@str nvarchar(500) set @str='天河麗特青春:中國廣東省廣州市天河區天河路623號天河 ...
- CMDB认识和需求分析
一.认识ITIL ITIL即IT基础架构库(Information Technology Infrastructure Library,信息技术基础架构库)由英国政府部门CCTA(Central ...
- 1729 单词查找树 2000年NOI全国竞赛
1729 单词查找树 2000年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 在进行文法分析的 ...
- css一个很好用的hover显示
之前一直想在样式实现,hover时显示其他div,今天终于找到了,(*^▽^*) .a悬停时显示.b .a:hover .b { display: block; }
- SharePoint 2013 - Designer Workflow
另一篇文章 SharePoint Designer - Workflow 1. 可以定义每个Stage的名称,并将Stage名称显示在工作流状态字段,相比于SP2010时仅有的in progress ...
- C++异常安全的思考
异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异常时,这个异常 能保持原样传递到外层调用代码 2.异常安全性: 1,抛出异常后,资源不泄露, 2,抛出异常 ...
- supersocket 通过配置文件启动服务 总是 初始化失败的 解决办法
<serverTypes> <add name="APPServerType" type="TMPServer.APP.APPServer, TMPSe ...