浙林龙哥

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 有Bug的代码:
 public void Dispose()
  {
   if(_objTrans == null)
   {
    return;
   }
   try
   {
    if(_objTrans.Connection != null)
    {
     _objTrans.Commit();
    }
   }
   catch(SqlException sqlex)
   {
    //Debug.Write("Jump.Framework.Data.Data.SqlTrans.Dispose 出错!");
    throw sqlex;
   }
   finally
   {
    if(_objTrans.Connection != null && _objTrans.Connection.State != ConnectionState.Closed)
    {
     try
     {
      _objTrans.Connection.Close();
      _objTrans.Connection.Dispose();
      _objTrans.Connection = null;
     }
     catch(SqlException sqlex2)
     {
      //string strErr = String.Format("{0}.mymethod - 不能关闭数据库连接: {1}",this.GetType().Name,sqlex2.ToString());
      throw sqlex2;
     }
    }
    _objTrans = null;
   }
  }
以上代码的问题在于:
_objTrans.Commit();后,_objTrans.Connection 会变成NULL
所以下面的finally关闭conn都不会执行。

修改后:
  public void Dispose()
  {
   if(_objTrans == null)
   {
    return;
   }
   SqlConnection conn = _objTrans.Connection;
   try
   {
    if(conn != null)
    {
     _objTrans.Commit();
    }
   }
   catch(SqlException sqlex)
   {
    //Debug.Write("Jump.Framework.Data.Data.SqlTrans.Dispose 出错!");
    throw sqlex;
   }
   finally
   {
    if(conn != null && conn.State != ConnectionState.Closed)
    {
     try
     {
      conn.Close();
      conn.Dispose();
      conn = null;
     }
     catch(SqlException sqlex2)
     {
      //string strErr = String.Format("{0}.mymethod - 不能关闭数据库连接: {1}",this.GetType().Name,sqlex2.ToString());
      throw sqlex2;
     }
    }
    _objTrans = null;
   }
  }
posted on 2004-11-17 17:06  浙林龙哥  阅读(434)  评论(0)    收藏  举报