• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        運用設計模式構建通用數據庫訪問類

        運用設計模式構建通用數據庫訪問類

        更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

        使用設計模式構建通用數據庫訪問類

        在應用程序的設計中,數據庫的訪問是非常重要的,我們通常需要將對數據庫的訪問集中起來,以保證良好的封裝性和可維護性。在.Net中,數據庫的訪問,對于微軟自家的SqlServer和其他數據庫(支持OleDb),采用不同的訪問方法,這些類分別分布于System.Data.SqlClient和System.Data.OleDb名稱空間中。微軟后來又推出了專門用于訪問Oracle數據庫的類庫。我們希望在編寫應用系統的時候,不因這么多類的不同而受到影響,能夠盡量做到數據庫無關,當后臺數據庫發生變更的時候,不需要更改客戶端的代碼。

        這就需要我們在實際開發過程中將這些數據庫訪問類再作一次封裝。經過這樣的封裝,不僅可以達到上述的目標,還可以減少操作數據庫的步驟,減少代碼編寫量。在這個方面,微軟為我們提供了Application Block,但是,可惜的是目前只支持Sql Server。這里,介紹一種在實際應用中得到了非常好的效果的實作策略——筆者編寫的Websharp框架中的數據訪問結構。Factory設計模式是使用的主要方法。

        我們先來看看Factory的含義:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類。我們這里可能會處理對多種數據庫的操作,因此,需要首先定義一個操縱數據庫的接口,然后,根據數據庫的不同,由類工廠決定實例化哪個類。

        下面,我們首先來定義這個訪問接口。為了方便說明問題,我們在這里只列出了比較少的方法,其他的方法是很容易參照添加的。

        public interface DataAccess

        {

        DatabaseType DatabaseType{get;} //數據庫類型

        IDbConnection DbConnection{get;} //得到數據庫連接

        void Open(); //打開數據庫連接

        void Close(); //關閉數據庫連接

        IDbTransaction BeginTransaction(); //開始一個事務

        int ExecuteNonQuery(string commandText); //執行Sql語句

        DataSet ExecuteDataset(string commandText);//執行Sql,返回DataSet

        }




        因為,DataAccess的具體實現類有一些共同的方法,所以,先從DataAccess實現一個抽象的AbstractDataAccess類,包含一些公用方法。然后,我們分別為Sql Server、Oracle和OleDb數據庫編寫三個數據訪問的具體實現類:

        public sealed class MSSqlDataAccess : AbstractDataAccess

        {

        ……//具體實現代碼。

        }



        public class OleDbDataAccess : AbstractDataAccess

        {

        ……//具體實現代碼。

        }



        public class OracleDataAccess : AbstractDataAccess

        {

        ……//具體實現代碼。

        }




        現在我們已經完成了所要的功能,下面,我們需要創建一個Factory類,來實現自動數據庫切換的管理。這個類很簡單,主要的功能就是根據數據庫類型,返回適當的數據庫操縱類。

        public sealed class DataAccessFactory

        {

        private DataAccessFactory(){}

        private static PersistenceProperty defaultPersistenceProperty;

        public static PersistenceProperty DefaultPersistenceProperty

        {

        get{return defaultPersistenceProperty;}

        set{defaultPersistenceProperty=value;}

        }

        public static DataAccess CreateDataAccess(PersistenceProperty pp)

        {

        DataAccess dataAccess;

        switch(pp.DatabaseType)

        {

        case(DatabaseType.MSSQLServer):

        dataAccess = new MSSqlDataAccess(pp.ConnectionString);

        break;

        case(DatabaseType.Oracle):

        dataAccess = new OracleDataAccess(pp.ConnectionString);

        break;

        case(DatabaseType.OleDBSupported):

        dataAccess = new OleDbDataAccess(pp.ConnectionString);

        break;

        default:

        dataAccess=new MSSqlDataAccess(pp.ConnectionString);

        break;

        }

        return dataAccess;

        }

        public static DataAccess CreateDataAccess()

        {

        return CreateDataAccess(defaultPersistenceProperty);

        }

        }




        好了,現在,一切都完成了,客戶端在代碼調用的時候,可能就是采用如下形式:

        PersistenceProperty pp = new PersistenceProperty();

        pp.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=Northwind;";

        pp.DatabaseType = DatabaseType. MSSQLServer;

        pp.UserID = “sa”;

        pp.Password = “”;

        DataAccess db= DataAccessFactory.CreateDataAccess(pp)

        db.Open();

        ……//db.需要的操作

        db.Close();



        或者,如果事先設定了DataAccessFactory的DefaultPersistenceProperty屬性,可以直接使用

        DataAccess db= DataAccessFactory.CreateDataAccess()

        方法創建DataAccess實例。




        當數據庫發生變化的時候,只需要修改PersistenceProperty的值,客戶端不會感覺到變化,也不用去關心。這樣,實現了良好的封裝性。當然,前提是,你在編寫程序的時候,沒有用到特定數據庫的特性,例如,Sql Server的專用函數。

        以上,介紹了一種通用數據庫操作類的實現設計方法,希望能夠對大家有所啟發。全部的源代碼,可以從 www.websharp.org下載,或者到 http://www.uml.org.cn/dvbbs6.0.0/index.asp 進行討論。除了數據訪問的源代碼,你還可以下載到全部Websharp源代碼。



        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费黄色福利视频| 又硬又粗又长又爽免费看| 久草免费福利在线| 国产一级特黄高清免费大片| 亚洲乱码av中文一区二区| 男女超爽刺激视频免费播放 | 中国毛片免费观看| 在线免费观看视频你懂的| 亚洲综合一区国产精品| 日本二区免费一片黄2019| 老湿机一区午夜精品免费福利| 一个人免费观看视频在线中文| 玖玖在线免费视频| 婷婷久久久亚洲欧洲日产国码AV| 亚洲AV无码专区国产乱码不卡| 国产精品九九久久免费视频| 国产亚洲色婷婷久久99精品91| 亚洲人成7777影视在线观看| 国产精品久久免费| 亚洲av永久无码| 精品亚洲视频在线观看| 污视频在线免费观看| 在线aⅴ亚洲中文字幕| 性做久久久久免费看| 国产JIZZ中国JIZZ免费看| 亚洲AV无码成人精品区天堂| 18以下岁毛片在免费播放| 亚洲人成www在线播放| 亚洲国产a级视频| 久久久免费精品re6| 亚洲日本国产综合高清| 亚洲高清免费视频| **aaaaa毛片免费| 免费一区二区三区在线视频| 亚洲AV日韩AV鸥美在线观看| 成年人在线免费看视频| 国产精品免费久久久久电影网| 免费一级做a爰片久久毛片潮喷| 亚洲伊人久久大香线蕉影院| 亚洲AV无码成人精品区大在线| 国产精品亚洲自在线播放页码|