它开始使我感到困惑。
我正在使用事务范围,并且事务没有在Fill_WO_Report_Table(..)中滚动插入数据库。
我正在寻找这个问题的具体解决方案,因为我已经在论坛上研究了这个主题。
我的代码:
public bool Generate(decimal wo_id)
{
string exception;
using (var scope = new TransactionScope())
{
try
{
if (Fill_WO_Report_Table(wo_id, out exception) == false)
{
scope.Dispose();
throw new Exception("Cannot Complete Transaction.\n" + exception);
}
。 。 //其他代码逻辑 //其他代码逻辑 。
if (Drop_WO_Report_Table(out exception) == false)
throw new Exception("Cannot Complete Transaction" + exception);
scope.Complete();
scope.Dispose();
return true;
}
catch (Exception exe)
{
scope.Dispose();
MessageBox.Show(exe.Message, "WO Report", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}// scope
Fill_WO_Report_Table()函数如下: -
public bool Fill_WO_Report_Table(decimal wo_id, out string excp)
{
try
{
if (GetCompanyDetails(ref dtCompany_Details, out excp) == false)
throw new Exception(excp);
if (excp != null)
{
MessageBox.Show("Failed to Load Company Details.\n" + excp, "WO Report", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
//query1
functionToExecQuery();
//query2
functionToExecQuery();
//query3
functionToExecQuery();
//query4
functionToExecQuery();
return true;
}
catch (Exception exe)
{
return false;
throw;
}
当从Query3的functionToExecQuery()引发异常时,它应该回滚在Query1和Query2中执行的Create或insert。
我怎样才能实现这个目标?