使用設計模式構建通用資料庫訪問類
在應用程式的設計中,資料庫的訪問是非常重要的,我們通常需要將對資料庫的訪問集中起來,以保證良好的封裝性和可維護性。在.net中,資料庫的訪問,對於微軟自家的sqlserver和其他資料庫(支援oledb),採用不同的訪問方法,這些類分別分布於system.data.sqlclient和system.data.oledb命名空間中。微軟後來又推出了專門用於訪問oracle資料庫的類庫。我們希望在編寫應用系統的時候,不因這麼多類的不同而受到影響,能夠盡量做到資料庫無關,當後台資料庫發生變更的時候,不需要更改客戶端的**。
有的時候,為了效能和其他原因,我們也希望提供對資料庫訪問的快取,特別是資料庫連線的快取。雖然微軟給我們內建了資料庫快取,但是,自己控制快取,無疑可以提供更大的靈活性和效率。
這就需要我們在實際開發過程中將這些資料庫訪問類再作一次封裝。這裡,介紹一種在實際應用中得到了非常好的效果的實作策略。factory和silgleton設計模式是使用的主要方法。
我們先來看看factory的含義:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。我們這裡可能會處理對多種資料庫的操作,因此,需要首先定義乙個操縱資料庫的介面,然後,根據資料庫的不同,由類工廠決定例項化哪個類。
下面,我們首先來定義這個訪問介面。為了方便說明問題,我們為這個類定義了比較少的方法,其他的方法是很容易參照新增的。同時注意,我這裡使用了abstract class來定義這個訪問介面,而不是inte***ce,理由在後面可以看到。
public abstract class dboperator //得到資料庫連線 public abstract void open(); //開啟資料庫連線 public abstract void close(); //關閉資料庫連線 public abstract void begintrans(); //開始乙個事務 public abstract void committrans(); //提交乙個事務 public abstract void rollbacktrans(); //回滾乙個事務 public abstract void exesql(string strsql,string strparams,object objvalues); //執行sql語句,沒有返回值 public abstract dataset exesqlfordataset(string querystring);//執行sql,返回dataset }
然後,我們分別為sql server和oledb資料庫編寫兩個資料訪問的具體實現類:
sql server的資料庫訪問類:
internal class sqldboperator: dboperator } public sqldboperator(string strconnection) public override void open() public override void close() public override void begintrans() public override void committrans() public override void rollbacktrans() public override void exesql(string strsql,string strparams,object strvalues) { sqlcommand cmd=new sqlcommand(); cmd.connection=this.conn ; if(intransaction) cmd.transaction=trans; if((strparams!=null)&&(strparams.length!=strvalues.length) ) throw new paramvaluenotmatchexception("查詢引數和值不對應!"); cmd.commandtext=strsql; if(strparams!=null) { for(int i=0;i
這裡使用的演算法比較簡單,只是為了能夠比較清楚地說明問題,讀者應當能夠在實際使用過程中,實現更好的演算法。
以上,介紹了一種通用資料庫操作類的實現設計方法,希望能夠對大家有所啟發。筆者設計websharp中介軟體的時候,在資料庫處理層,採用了上面的方法,取得了很好的效果。
使用設計模式構建通用資料庫訪問類
在應用程式的設計中,資料庫的訪問是非常重要的,我們通常需要將對資料庫的訪問集中起來,以保證良好的封裝性和可維護性。在.net中,資料庫的訪問,對於微軟自家的sqlserver和其他資料庫 支援oledb 採用不同的訪問方法,這些類分別分布於system.data.sqlclient和system.d...
c 通用資料庫訪問類
在應用程式的設計中,資料庫的訪問是非常重要的,我們通常需要將對資料庫的訪問集中起來,以保證良好的封裝性和可維護性。在.net中,資料庫的訪問,對於微軟自家的sqlserver和其他資料庫 支援oledb 採用不同的訪問方法,這些類分別分布於system.data.sqlclient和system.d...
通用資料庫訪問DLL實現
通用資料庫訪問模組 實現介面 通過范型類來做所有操作的物件,來對應任何表結構的資料。這種通用型別只能對單錶操作吧,不是很方便。包裝通用事務和通用資料庫鏈結物件,便於對不通資料庫相容 內建方法為泛型型別物件的,增刪改及查詢,加返回泛型集合物件 通用表物件對映模型 基類實現 新增更新字典,加入查詢表字段...