天天看點

讓資料庫通路元件支援Using

以前一直以為把資料庫通路層已經寫得很完美了,今天無意中一個客戶提醒、現在的資料庫通路層不隻是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