事务不是从TransactionScope回滚的

时间:2015-08-07 10:39:29

标签: c# transactions

它开始使我感到困惑。

我正在使用事务范围,并且事务没有在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。

我怎样才能实现这个目标?

0 个答案:

没有答案