try
            {
                using (IDbConnection connection = InsDALFactory.Product.GetOpenedConnection())
                {
                    using (IDbTransaction trans = connection.BeginTransaction())
                    {
                        
                        trans.Commit();
                        return new InsReturnMessage();
                    }
                }
            }
            catch (Exception expt)
            {
                WuhanIns.Framework.Core.ExceptionHandlerHelper.HandleException(expt);
                return new InsReturnMessage(expt.Message);
            }如果在trans.Commit();之前发生错误,或者return,那么连接会自动关闭,事务会不会自动回滚?

解决方案 »

  1.   

    肯定不会自动回滚了,应该把trans.RollBack()放在catch里面
      

  2.   

    catch是在using外面,不认识“trans”,程序都会报错
      

  3.   

    我知道可以我们手动回滚,我想知道的是,如果把事务放在using里面,就像我写的代码,那样的情况是否会自动回滚?
      

  4.   

    个人觉得不会 using只是决定了一个对象的作用域,并不能控制事务啊 。
      

  5.   

    需要写一个完整的语句方可回滚,没有RollBack()回滚语句如何回滚?
      

  6.   

    刚才用反射看了下OracleTransaction的代码
    释放资源的代码:
    private void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (this.Connection != null)
            {
                this.Connection.Rollback();
            }
            this._connection = null;
        }
    }
    所以在释放资源的时候,会回滚 
      

  7.   

    会不会回滚还要看是什么数据库,如果是Oracle9.0版本的话,貌似回滚事件没有实现
    10.0的时候才可以了