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);   //尾部

原文地址:https://www.cnblogs.com/Sea1ee/p/7810557.html