求解 C# 如何避免多个独立”事务“的有关问题
求解 C# 如何处理多个独立”事务“的问题
写了一个DBHelper类,里面有个执行增删改的功用方法,并且都加了事务
//执行增删改
public static int ExecCommand(string sql, SqlParameter[] paras)
{
//高效using语句
using (SqlConnection con = new SqlConnection(ConnString))
{
SqlCommand cmd = new SqlCommand();
//追加参数
AppendParams(con, cmd, paras, sql);
//这里加事务
SqlTransaction transaction = cmd.Transaction = con.BeginTransaction();
int count = 0;
try
{
count = cmd.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception)
{
count = 0;
transaction.Rollback();
}
return count;
}
}
假如下面有2个方法
/// <summary>
/// 更新账号
/// </summary>
public int UpdateAccount(Guid userID, string account)
{
string sql = "UPDATE Users SET Account=@Account WHERE ID=@ID";
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@Account", SqlDbType.NVarChar){ Value = account },
new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = userID }
};
return Solution.HPK.CoreArea.Utility.DataBase.DBHelper.ExecCommand(sql, parameters);
}
/// <summary>
/// 更新状态
/// </summary>
public int UpdateStatus(Guid userID, int status)
{
string sql = "UPDATE Users SET Status=@Status WHERE ID=@ID";
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@Status", SqlDbType.Int){ Value = status },
new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = userID }
};
return Solution.HPK.CoreArea.Utility.DataBase.DBHelper.ExecCommand(sql, parameters);
}
如果我要同时执行UpdateAccount 和UpdateStatus这个方法,其中有一个失败另一个还是正常执行
怎么处理这个问题,,除了直接把这2个方法拼成一条sql,怎么去处理这个问题
------解决思路----------------------
用TransactionScope
------解决思路----------------------
SqlTransaction transaction = con.BeginTransaction();
//追加参数,把transaction 也作为参数,然后在方法里面cmd.Transaction=transaction;
AppendParams(con, cmd, paras, sql);
写了一个DBHelper类,里面有个执行增删改的功用方法,并且都加了事务
//执行增删改
public static int ExecCommand(string sql, SqlParameter[] paras)
{
//高效using语句
using (SqlConnection con = new SqlConnection(ConnString))
{
SqlCommand cmd = new SqlCommand();
//追加参数
AppendParams(con, cmd, paras, sql);
//这里加事务
SqlTransaction transaction = cmd.Transaction = con.BeginTransaction();
int count = 0;
try
{
count = cmd.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception)
{
count = 0;
transaction.Rollback();
}
return count;
}
}
假如下面有2个方法
/// <summary>
/// 更新账号
/// </summary>
public int UpdateAccount(Guid userID, string account)
{
string sql = "UPDATE Users SET Account=@Account WHERE ID=@ID";
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@Account", SqlDbType.NVarChar){ Value = account },
new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = userID }
};
return Solution.HPK.CoreArea.Utility.DataBase.DBHelper.ExecCommand(sql, parameters);
}
/// <summary>
/// 更新状态
/// </summary>
public int UpdateStatus(Guid userID, int status)
{
string sql = "UPDATE Users SET Status=@Status WHERE ID=@ID";
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@Status", SqlDbType.Int){ Value = status },
new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = userID }
};
return Solution.HPK.CoreArea.Utility.DataBase.DBHelper.ExecCommand(sql, parameters);
}
如果我要同时执行UpdateAccount 和UpdateStatus这个方法,其中有一个失败另一个还是正常执行
怎么处理这个问题,,除了直接把这2个方法拼成一条sql,怎么去处理这个问题
------解决思路----------------------
用TransactionScope
------解决思路----------------------
SqlTransaction transaction = con.BeginTransaction();
//追加参数,把transaction 也作为参数,然后在方法里面cmd.Transaction=transaction;
AppendParams(con, cmd, paras, sql);