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