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批量添加,更新,删除的更多相关文章

  1. ado.net 批量添加 更新 删除

    自曾列就别往下看 别折腾了   使用 SqlBulkCopy ,dataTable 必须跟sql里面的表字段完全一样 下面在sqlserver中演示 mysql 请google MySqlBulkLo ...

  2. Sql批量添加,批量查询,批量删除,批量修改。mybatis都有对应标签

    Sql批量添加,批量查询,批量删除,批量修改.mybatis都有对应标签

  3. SQL批量添加主键脚本

    --SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...

  4. PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆

    PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆  什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...

  5. Windows批量添加和删除IP

    随着天气变冷了,好多小伙伴都开始变懒了,都想用最快的方式完成任务 下面给大家介绍一下Windows批量添加和删除IP的办法 (1)批量添加IP 直接在CMD下边运行下边命令. for /l %i in ...

  6. EF批量添加,删除,修改的扩展

    在EF各版本中,没有相应批量的添加,删除,修改,在用ORM 处理数据时直有个尴尬.在网上,也接到了很多网友的询问这方面的情况,特此今天把这方面的相关扩展分享一下,(这里只做批量删除的例子,添加和修改的 ...

  7. MYSQL-JDBC批量新增-更新-删除

    目录 1 概述 2 开启MYSQL服务端日志 3 深入MYSQL/JDBC批量插入 3.1 从一个例子出发 3.2 JDBC的批量插入操作 3.3 两个常被忽略的问题 3.5 误区 4 MYSQL/J ...

  8. hive 批量添加,删除分区

    一.批量添加分区:   use bigdata; alter table siebel_member add if not exists partition(dt='20180401') locati ...

  9. SqlServer——批量操作(批量添加,删除)

    批量添加数据: 一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , fir ...

随机推荐

  1. 简单的 shell 脚本 切分日志

    为避免日志过大,需要按天分割日志,定时计划任务脚本如下: /data/shell/backup_yesterday_nginx_log.sh declare logs_path="/data ...

  2. linux下统计文本行数的各种方法(二)

    上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...

  3. 在NuoDB上运行Asterisk

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,作者Hans362 您可能已经熟悉Asterisk,一个广泛部署的开源Telephony框架.如果你不太熟悉,你应该 ...

  4. CentOS初使用命令总结

    最近买了一台aliyun(ECS服务器)用来学习使用,初次使用难免要走弯路.遇到一些问题好长时间解决不了,结果经人指点豁然开朗.于是乎,总结了一些新生上路经验. 首先要解决的问题是:通过PuTTY.S ...

  5. c#中日期的处理

    DateTime.Now.ToShortDateString()//只取日期DateTime.Now.ToLongTimeString();//只取时间搞定DateTime.Now.ToShortTi ...

  6. 简单Java程序向实用程序的过度:二进制文件的读写

    File I/O中常见的文件读写: 1.字节流读写文本文件 FileInputStream; FileOutputStream; 2.字符流读写文本文件 FileReader; FileWriter; ...

  7. topshelf windows服务

    一 开发: 1.新建控制台程序 2.nuget下载topshelf,根据不同的net版本选择下载版本,本人4.5下载3.3.1 3.main方法中增加 HostFactory.Run(x => ...

  8. git添加远程库基本操作

    git添加远程库的基本步骤: 1.登录github,创建一个仓库,最好和本地仓库同名 2.输入git指令,把路径改成本地仓库所在盘符,如图 (project_03是我的本地仓库名称,路径是在G盘的WW ...

  9. Ubuntu16.04安装Hadoop2.6+Spark1.6+开发实例

    Ubuntu16.04安装Hadoop2.6+Spark1.6,并安装python开发工具Jupyter notebook,通过pyspark测试一个实例,調通整个Spark+hadoop伪分布式开发 ...

  10. iOS中使用RNCryptor对资源文件加密

    原文:http://blog.csdn.net/chenpolu/article/details/46277587 RNCryptor源码https://github.com/RNCryptor/RN ...