List<string> sqlList2 = new List<string>();
List<List<SqlParameter>> values2 = new List<List<SqlParameter>>();
sqlList.Add("update LL_Main set DelStatus='Y' where BH=@BH" + sqlList.Count.ToString());
values.Add(new List<SqlParameter>()
{
new SqlParameter("@BH"+ values.Count.ToString(),DJH),
});
sqlList.Add("update LL_SP set DelStatus='Y' where YFile=@YFile" + sqlList.Count.ToString());
values.Add(new List<SqlParameter>()
{
new SqlParameter("@YFile"+ values.Count.ToString(),DJH),
});
sqlList.Add("update ProData set DelStatus='Y' where BH=@BH" + sqlList.Count.ToString());
values.Add(new List<SqlParameter>()
{
new SqlParameter("@BH"+ values.Count.ToString(),DJH),
});
string str = Util.DBHelper.ExecuteSqlTran(sqlList, values);
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static string ExecuteSqlTran(List<String> SQLStringList, List<List<SqlParameter>> parasList)
{
if (SQLStringList.Count != parasList.Count)
{
return "参数错误";
}
using (SqlConnection sqlCon = new SqlConnection(Util.Configure.ConnStr))
{
sqlCon.Open(); //打开数据库连接
SqlCommand cmd = new SqlCommand(); //创建SqlCommand命令
cmd.Connection = sqlCon; //设置命令连接
SqlTransaction tx = sqlCon.BeginTransaction();//开始事务
cmd.Transaction = tx;//设置执行命令的事务
try
{
int count = 0;//定义int类型变量,存放该函数返回值
for (int n = 0; n < SQLStringList.Count; n++)//循环传入的sql语句
{
string strsql = SQLStringList[n]; //第n条sql语句
if (strsql.Trim().Length > 1) //如果第n条sql语句不为空
{
cmd.CommandText = strsql; //设置执行命令的sql语句
foreach (SqlParameter para in parasList[n])
{
cmd.Parameters.Add(para);
}
count += cmd.ExecuteNonQuery(); //调用执行增删改sql语句的函数ExecuteNonQuery(),执行sql语句
}
}
tx.Commit();//提交事务
cmd.Parameters.Clear();
return "";
}
catch (Exception ex)
{
tx.Rollback();
return ex.Message;
}
finally
{
sqlCon.Close();
}
}
}
以上是执行3条更新语句,要么都成功,要么都失败。
本文介绍如何在C#中使用事务处理执行多条SQL更新语句,确保操作的原子性和一致性,要么全部成功,要么全部回滚。

515

被折叠的 条评论
为什么被折叠?



