以前一直以為把資料庫通路層已經寫得很完美了,今天無意中一個客戶提醒、現在的資料庫通路層不隻是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;
}
}
}
經過測試,順利調試成功,又完善了一下,心裡舒坦了很多。
private void TestUsing()
using (IDbHelper dbHelper = new SqlHelper(BaseSystemInfo.UserCenterDbConnection))
dbHelper.ExecuteNonQuery(" SELECT GETDATE() ");
本文轉自jirigala_bao 51CTO部落格,原文連結:http://blog.51cto.com/jirigala/810679