在业务应用中我们会遇到这样的问题
引用了一个DLL 在这个DLL中有一个方法,我们需要调用并执行,然而这个DLL并非独立执行的,要和本系统一起执行,要达到的效果一荣俱荣,一损俱损。
当然这里不仅仅局限于DLL 也可能是本系统内部的功能模块。
举例: A 是一个独立的应用模块 B 是一个独立的应用模块 但是A和B要一起执行 购物的时候 扣款了但是没有购买记录是不是很不爽啊。
那么这个情况就是 A 先预执行 预执行成功 执行B B如果执行成功 则A 执行 PreDoCommitTrans()
如果B 执行失败 则A 执行PreDoRollBack() 即可。(如果有技术问题加五群:480888314)
我目前的解决办法就是预执行,先上代码:
/// <summary>
/// SQL 事务 预执行
/// </summary>
/// <param name="Oracle_str"></param>
/// <returns></returns>
SqlTransaction _Pretran;
SqlConnection connTrans;
public bool PreExecuteTrans(List<string> Oracle_str)
{
connTrans = new SqlConnection(GetConnString());
if (connTrans.State != ConnectionState.Open)
{
connTrans.Open();
}
SqlCommand _OracleCommand = new SqlCommand();
_Pretran = connTrans.BeginTransaction();
_SqlCommand.Connection = connTrans;
_SqlCommand.Transaction = _Pretran;
try
{
for (int i = 0; i < Oracle_str.Count; i++)
{
_SqlCommand.CommandText = Oracle_str[i].ToString();
_SqlCommand.ExecuteNonQuery();
}
}
catch (Exception ex)
{
ExecptionRecord.WriteExecptionToFile(ex.ToString(), _OracleCommand.CommandText);
return false;
}
return true;
}
/// <summary>
/// 预提交
/// </summary>
/// <returns></returns>
public bool PreDoCommitTrans()
{
try
{
_Pretran.Commit();
}
catch (Exception ex)
{
ExecptionRecord.WriteExecptionToFile("事务预执行提交失败!", ex.ToString());
connTrans.Close();
return false;
}
connTrans.Close();
return true;
}
/// <summary>
/// 预回滚
/// </summary>
/// <returns></returns>
public bool PreDoRollBack()
{
try
{
_Pretran.Rollback();
}
catch (Exception ex)
{
ExecptionRecord.WriteExecptionToFile("事务预执行回滚失败!", ex.ToString());
connTrans.Close();
return false;
}
connTrans.Close();
return true;
}
五群号:(如果有技术问题加群:480888314)