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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM