以前一直以为把数据库访问层已经写得很完美了,今天无意中一个客户提醒、现在的数据库访问层不只是Using语句,可能是编程习惯的原因一直不怎么用Using这个写法,的确是自己做得不好,马上针对客户的反馈意见进行了改进,增加了IDisposable接口的实现。
//
------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd.
// ------------------------------------------------------------
using System;
using System.Data;
using System.Data.Common;
using System.IO;
using System.Text;
namespace DotNet.DbUtilities
{
using DotNet.Utilities;
/// <summary>
/// BaseDbHelper
/// 有关数据库连接的方法。
///
/// 修改纪录
///
/// 2011.01.29 版本:3.1 JiRiGaLa 实现IDisposable接口。
/// 2010.06.13 版本:3.0 JiRiGaLa 改进为支持静态方法,不用数据库Open、Close的方式,AutoOpenClose开关。
/// 2010.03.14 版本:2.0 JiRiGaLa 无法彻底释放、并发时出现异常问题解决。
/// 2009.11.25 版本:1.0 JiRiGaLa 改进ConnectionString。
///
/// 版本:3.1
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2011.01.29 </date>
/// </author>
/// </summary>
public abstract class BaseDbHelper : IDisposable // IDbHelper
{
代码省略
public void Dispose()
{
this .dbCommand = null ;
this .dbDataAdapter = null ;
this .dbTransaction = null ;
// 关闭数据库连接
if ( this .dbConnection != null )
{
if ( this .dbConnection.State != ConnectionState.Closed)
{
this .dbConnection.Close();
}
}
this .dbConnection = null ;
}
}
}
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd.
// ------------------------------------------------------------
using System;
using System.Data;
using System.Data.Common;
using System.IO;
using System.Text;
namespace DotNet.DbUtilities
{
using DotNet.Utilities;
/// <summary>
/// BaseDbHelper
/// 有关数据库连接的方法。
///
/// 修改纪录
///
/// 2011.01.29 版本:3.1 JiRiGaLa 实现IDisposable接口。
/// 2010.06.13 版本:3.0 JiRiGaLa 改进为支持静态方法,不用数据库Open、Close的方式,AutoOpenClose开关。
/// 2010.03.14 版本:2.0 JiRiGaLa 无法彻底释放、并发时出现异常问题解决。
/// 2009.11.25 版本:1.0 JiRiGaLa 改进ConnectionString。
///
/// 版本:3.1
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2011.01.29 </date>
/// </author>
/// </summary>
public abstract class BaseDbHelper : IDisposable // IDbHelper
{
代码省略
public void Dispose()
{
this .dbCommand = null ;
this .dbDataAdapter = null ;
this .dbTransaction = null ;
// 关闭数据库连接
if ( this .dbConnection != null )
{
if ( this .dbConnection.State != ConnectionState.Closed)
{
this .dbConnection.Close();
}
}
this .dbConnection = null ;
}
}
}
经过测试,顺利调试成功,又完善了一下,心里舒坦了很多。
private
void
TestUsing()
{
using (IDbHelper dbHelper = new SqlHelper(BaseSystemInfo.UserCenterDbConnection))
{
dbHelper.ExecuteNonQuery( " SELECT GETDATE() " );
}
}
{
using (IDbHelper dbHelper = new SqlHelper(BaseSystemInfo.UserCenterDbConnection))
{
dbHelper.ExecuteNonQuery( " SELECT GETDATE() " );
}
}
客户多了有一个好处,很多问题都会得到及时的反馈,同时修改一个错误,改进了功能,又有几十几百的客户收益,会很有成就感。
本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1200877,如需转载请自行联系原作者