有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;
}
}
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;
}
}
浙公网安备 33010602011771号