2 約定(
1)本文中談及的資料庫僅限於關聯式資料庫。
資料庫型別
指不同的關係資料庫系統,如
oracle
,sql server
,sybase
等等。(2)
資料庫物件
指ado.net
中訪問資料庫的物件:
connection
物件,command
物件,adapter
物件、parameter
物件。3
應用程式的一般結構
通常,資料庫相關的應用程式應該具有圖
1所示的結構。至於為什麼,就不用多說了。從圖中可以看到資料庫訪問層所處的位置,及其應該具有的功能。 圖
1 應用程式一般結構
4 適應不同型別的資料庫如第1
節所述,在
ado.net
中,使用不同型別的資料庫,主要就是這些資料庫物件的變化:
connection
,command
,adapter
,parameter
。在程式中我們需要根據不同的資料庫建立合適的物件。
通常的簡單做法是使用條件判斷,是何種型別的資料庫,建立相應的資料庫物件,**如下:
[示例**
1] 簡單,但缺乏彈性和復用性的方法
//////
資料庫型別。
///
public
enum
dbtype
class
dbobjectfactory
throw
newexception("
不支援的資料庫型別。");
}
//////
parameter
物件的建立。
///
///
資料庫型別。
///parameter
物件。public
static
idataparameter createparameter(dbtype dbtype)
throw
newexception("
不支援的資料庫型別。");
}
}
上面的**中都是條件判斷,而且
createconnection
函式和createparameter
函式**幾乎一樣,
dataadapter
和command
的建立也是如此。這樣的做法缺點主要有兩點:(1
)**重複,可維護性差;(2
)新增加一種資料庫型別時,需要修改現有的**。
其實我們仔細分析以下資料庫型別和物件之間的關係,可以發現圖
2所示的規律: 圖
2 不同資料庫和物件的關係
很明顯,採用抽象工廠模式可以很好的處理不同資料庫和不同資料庫物件之間的組和系列的關係。如圖3:
圖
3 資料庫物件工廠設計
根據上面的類圖,生成
c#**如下:
[示例**
2: dbobjectfactory.cs]
(有刪節)
//////
資料庫物件工廠的虛基類。
///
public
abstract
class
dbobjectfactory
[
示例**
3: oledbobjectfactory.cs]
(有刪節)
//////
oledb
資料庫物件工廠。
///
public
class
oledbobjectfactory : dbobjectfactory
//////
建立command
物件。
///
///執行
sql
的command
物件。public
override
idbcommand createcommand()
///
///建立
dbdataadapter
物件。
///
///dbdataadapter
物件。public
override
idbdataadapter createdataadapter()
///
///建立
parameter
物件。
///
///parameter
物件。public
override
idataparameter createparameter()
}
[
示例**
4: oledbobjectfactory.cs]
(有刪節)
//////
sql server
資料庫物件工廠。
///
public
class
sqlobjectfactory : dbobjectfactory
//////
建立command
物件。
///
///執行
sql
的command
物件。public
override
idbcommand createcommand()
///
///建立
dbdataadapter
物件。
///
///dbdataadapter
物件。public
override
idbdataadapter createdataadapter()
///
///建立
parameter
物件。
///
///parameter
物件。public
override
idataparameter createparameter()
}
使用時,根據應用環境的資料庫型別,建立相應的具體工廠物件即可。這樣就避免了使用生硬的條件判斷了。新增加一種型別的資料庫時,只要新增乙個類,從
dbobjectfactory
繼承即可,而現有的**不需要做任何的修改。
資料庫訪問層
using system using system.data.sqlclient namespace dbcontrol setpublic sqlconnection sqlconnectionstring public string xmlconnectionstring set public ...
PDO資料庫訪問抽象層
pdo建構函式說明 dsn資料來源名稱,包括主機名埠號和資料庫名稱 username資料庫使用者名稱 password 密碼 driver options連線資料庫的其他選項 pdo是比mysql更高效,資料庫遷移時基本不用更改太多的 sql語句 pdo exec 返回sql語句後受影響的行數 qu...
C 訪問資料庫2
c 訪問資料庫無疑是非常方便的,下面給出了c 訪問mssql的基本方法。首先宣告命名空間using system.data.sqlclient 再使用sqlconnection類連線,sqlcommand類執行sql命令,結果返回給sqldatareader類或其它類。各類的基本用法介紹 sqlco...