SQL批量添加,更新,删除
SQL语句:
存储过程:
代码:
这⾥说的是关于SQL的批量操作数据。
需要准备:
三层框架:利⽤动软代码⽣成器(可以快速⽣成增删改查)⽣成三层 Model,BLL,Dal
① ------->SQL操作的辅助类
② -------->⼀个命令类
事务的⽅法:
///<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();
return0;
}
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();
return0;
}
if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
{
trans.Rollback();
return0;
}
continue;
}
int val = cmd.ExecuteNonQuery();
count += val;
if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
{
trans.Rollback();
return0;
}
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
{
return0;
}
}
③批量更新类似更新,把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;
sqltransaction什么意思}
}
批量数据,这个格式:(现实的需求⾥⾯可能批量不⽌是做⼀种操作,可能添加,删除,更新⼀起做的) 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); //尾部
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论