• 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 = 0;
                            //循环
                            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(") == -1)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
    
                                    object obj = cmd.ExecuteScalar();
                                    bool isHave = false;
                                    if (obj == null && obj == DBNull.Value)
                                    {
                                        isHave = false;
                                    }
                                    isHave = Convert.ToInt32(obj) > 0;
    
                                    if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
                                    if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
                                    continue;
                                }
                                int val = cmd.ExecuteNonQuery();
                                count += val;
                                if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
                                {
                                    trans.Rollback();
                                    return 0;
                                }
                                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[0].Value = item.Name; parameters[1].Value = item.Age; parameters[2].Value = item.Sex; info.Parameters = parameters; //参数

    strsql.Add(info); //把多条SQL语句添加进去,一起执行 }
    int num = DbHelperSQL.ExecuteSqlTran(strsql); //执行事务 一定是要执行事务,多条数据的时候要么全部成功要么失败 if (num > 0) { return num; } else { return 0; } }

    ③批量更新            类似更新,把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,4), new SqlParameter("@Sex", SqlDbType.Int,4), new SqlParameter("@ID", SqlDbType.Int,4)}; parameters[0].Value = item.Name; parameters[1].Value = item.Age; parameters[2].Value = item.Sex; parameters[3].Value = item.ID; info.Parameters = parameters; strsql.Add(info); } int rows = DbHelperSQL.ExecuteSqlTran(strsql); if (rows > 0) { 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);   //尾部

  • 相关阅读:
    spring中Bean的懒加载
    ActiveMQ学习教程
    Maven中解决jar包冲突的三种方式
    Spring的日志管理
    mybatis使用collection查询集合属性规则
    springcloud之Feign伪装
    springcloud之Hystrix熔断入门
    springcloud的负载均衡Ribbon入门
    springcloud的Eureka启动时报错:Connection refused: connect
    springboot启动过程中出现You must configure either the server or JDBC driver (via the serverTimezone configuration
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/7810557.html
Copyright © 2020-2023  润新知