資料庫訪問層設計與實現(2)

2021-04-07 07:54:23 字數 3235 閱讀 4491

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...