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