[摘 要] 對(duì)VB中數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)進(jìn)行了介紹,并且討論了VB應(yīng)用程序開(kāi)發(fā)中最常用的三種數(shù)據(jù)訪問(wèn)接口的體系結(jié)構(gòu)、性能特點(diǎn),最后對(duì)這三種接口的技術(shù)進(jìn)行集中總結(jié),給出了它們各自的適用場(chǎng)所。
[關(guān)鍵詞] 數(shù)據(jù)庫(kù)訪問(wèn) 數(shù)據(jù)訪問(wèn)接口 ODBC DAO RDO OLE DB ADO
當(dāng)今,數(shù)據(jù)庫(kù)技術(shù)和網(wǎng)絡(luò)技術(shù)是計(jì)算機(jī)技術(shù)領(lǐng)域中兩大主題。目前比較常用的數(shù)據(jù)庫(kù)編程開(kāi)發(fā)工具主要有:Delphi、PowerBuilder、Visual Basic、Visual C++、Borland C++等。本文闡述了最常用的三種數(shù)據(jù)訪問(wèn)接口的對(duì)象模型及其原理特性,分析總結(jié)出它們各自適用場(chǎng)合。
一、三種數(shù)據(jù)訪問(wèn)接口技術(shù)的體系結(jié)構(gòu)及性能特點(diǎn)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)處在不斷進(jìn)步中,DAO、RDO和ADO代表了該項(xiàng)技術(shù)發(fā)展的不同階段。盡管VB中提供了直接與ODBC或OLE DB交互訪問(wèn)數(shù)據(jù)庫(kù)的方法,但由于其屬于底層接口,編程復(fù)雜,通常較少使用,大部分VB應(yīng)用程序更常更多使用DAO、RDO和ADO,下面本文對(duì)這三種數(shù)據(jù)訪問(wèn)接口做進(jìn)一步的討論。
1.DAO(Data Access Objects,數(shù)據(jù)訪問(wèn)對(duì)象)體系結(jié)構(gòu)及性能特點(diǎn)
DAO的體系結(jié)構(gòu):DAO是使用分層的對(duì)象框架實(shí)現(xiàn)的,DBEngine是DAO對(duì)象的頂層,它表示Microsoft Jet Database Engine。每個(gè)應(yīng)用程序只能創(chuàng)建一個(gè) DBEngine對(duì)象,所有其他DAO對(duì)象都含在DBEngine對(duì)象內(nèi)。Workspace和 Errors是DAO框架的第二層。每個(gè)Workspace對(duì)象代表一個(gè)數(shù)據(jù)會(huì)話,用于控制數(shù)據(jù)庫(kù)的登錄安全性和事務(wù)范圍。每個(gè)Workspace對(duì)象包含一組Database對(duì)象。Database對(duì)象是DAO的中心對(duì)象。每個(gè)Database對(duì)象表示一個(gè)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)。當(dāng)Jet引擎打開(kāi)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)時(shí),一個(gè)Database對(duì)象就增加到該Database 集合中。Database對(duì)象包含其他主要的DAO對(duì)象集合。其中TableDef、Recordset、QueryDef對(duì)象集合用于訪問(wèn)SQLServer數(shù)據(jù)庫(kù),而Relations和Containers用于本地Jet引擎數(shù)據(jù)庫(kù)。
DAO的性能特點(diǎn):DAO是第一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)訪問(wèn)編程接口,是VB默認(rèn)的數(shù)據(jù)庫(kù)訪問(wèn)方式。這種結(jié)構(gòu)的好處是:同一代碼能支持所有格式——不管它是ISMA還是ODBC數(shù)據(jù)源。
2.RDO(Remote Data Objects,遠(yuǎn)程數(shù)據(jù)對(duì)象)體系結(jié)構(gòu)及性能特點(diǎn)
RDO的體系結(jié)構(gòu):RDO 是一種對(duì)象框架和對(duì)象集合,RDO的對(duì)象層次與ODBC 的對(duì)象層次非常相似,RDO對(duì)象模型完全并行于ODBC的體系結(jié)構(gòu)。在RDO對(duì)象框架的頂層是rdoEngine,rdoEngine表示遠(yuǎn)程數(shù)據(jù)源。所有的RDO應(yīng)用程序都必須有一個(gè)rdoEngine對(duì)象的實(shí)例,rdoEngine對(duì)象是惟一的,它總是作為一個(gè)對(duì)象集合,所有其他對(duì)象都包含在集合中。rdoEnvironment在rdoEngine的下一層,主要用于設(shè)置某個(gè)給定數(shù)據(jù)庫(kù)連接將要使用的用戶ID和口令值及事務(wù)范圍。rdoEnvironment對(duì)象的下一層是 rdoConnection對(duì)象,它負(fù)責(zé)創(chuàng)建對(duì)數(shù)據(jù)源的連接。它通過(guò)使用OpenConnection啟動(dòng)一個(gè)主連接。每個(gè)rdoConnection對(duì)象可以有rdoTable 、rdoResultset和rdoPreparedStatement對(duì)象集合。每個(gè)rdoTable對(duì)象表示一個(gè)數(shù)據(jù)庫(kù)表,每個(gè)rdoPreparedStatement對(duì)象表示一個(gè)預(yù)準(zhǔn)備的SQL 語(yǔ)句,每個(gè)rdoResultset對(duì)象表示由一個(gè)由SQL Select語(yǔ)句返回的數(shù)據(jù)集;這些對(duì)象都可以包含rdoColumn對(duì)象。使用rdoParameter對(duì)象在本地程序變量和參數(shù)化查詢或存儲(chǔ)過(guò)程之間交換數(shù)據(jù)。rdoError對(duì)象包含任何由基本的ODBC操作生成的錯(cuò)誤在VB的On Error句柄中,可以從rdoErrors集合中檢索指定的錯(cuò)誤信息。
RDO的性能特點(diǎn):RDO是VB與ODBC連接的推薦模式,是一個(gè)直接與 ODBC API連接的面向?qū)ο蠼涌?,但仍需使用Jet引擎。從RDO的層次模型可以看出,RDO兼具了ODBC API 與DAO二者的優(yōu)點(diǎn):一方面它的層次結(jié)構(gòu)沒(méi)有DAO復(fù)雜,對(duì)象的創(chuàng)建和處理簡(jiǎn)單;另一方面,RDO仍表露了ODBC API 的基層結(jié)構(gòu),可提供環(huán)境、連接和語(yǔ)句句柄。值得注意的是:RDO不能直接執(zhí)行改變數(shù)據(jù)庫(kù)規(guī)劃的操作,且僅能應(yīng)用于32 的操作系統(tǒng)中。使用 RDO的應(yīng)用程序可以繞過(guò)本地查詢處理程序而直接訪問(wèn)ODBC數(shù)據(jù)源,這點(diǎn)與 DAO 不同,由于這一特點(diǎn),RDO特別適合客戶/服務(wù)器應(yīng)用程序的開(kāi)發(fā)。如果你考慮采用一種直接與ODBC API一起使用的編程方法,那么,RDO是一種合適的解決方案。
3.ADO(ActiveX Data Objects,ActiveX 數(shù)據(jù)對(duì)象)體系結(jié)構(gòu)及性能特點(diǎn)
ADO的體系結(jié)構(gòu):ADO是使用層次對(duì)象框架實(shí)現(xiàn)的,但比DAO和RDO對(duì)象模型框架更簡(jiǎn)單。在ADO對(duì)象模型中,Connecton,Recordset和Command對(duì)象是三個(gè)主要的對(duì)象。Connecton對(duì)象表示對(duì)遠(yuǎn)程數(shù)據(jù)源的連接。除了創(chuàng)建數(shù)據(jù)源的 連接外,Connecton還可以用來(lái)控制事務(wù)范圍。Connecton對(duì)象可與Recordset對(duì)象或Command對(duì)象關(guān)聯(lián)。Recordset對(duì)象表示從數(shù)據(jù)源返回的結(jié)果集。它可以使用一個(gè)打開(kāi)的Connecton對(duì)象,也可以創(chuàng)建自己對(duì)目標(biāo)數(shù)據(jù)源的連接;Recordset 對(duì)象允許查詢和修改數(shù)據(jù)。每個(gè)Recordset對(duì)象包含一個(gè)Field對(duì)象集。Command 對(duì)象用來(lái)執(zhí)行命令和參數(shù)化的SQL語(yǔ)句,可用于SQL語(yǔ)句和返回結(jié)果集的SQL 查詢。Command對(duì)象也可以使用一個(gè)打開(kāi)的Connecton對(duì)象或創(chuàng)建自己對(duì)目標(biāo)數(shù)據(jù)源的連接。
ADO的性能特點(diǎn):ADO是DAO/RDO的后繼產(chǎn)物,集中了DAO和RDO的優(yōu)點(diǎn)。從ADO對(duì)象的層次模型看出,它包更少的對(duì)象、更多的屬性、方法、參數(shù)及事件。包含在DAO和RDO模型中的許多功能在ADO中被合并成單個(gè)對(duì)象,這樣就生成了一個(gè)簡(jiǎn)單得多的對(duì)象模型。ADO是一種基于OLE DB的面向?qū)ο蟾邔訑?shù)據(jù)庫(kù)訪問(wèn)接口,是VB的最新數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。ADO封裝了OLE DB并實(shí)現(xiàn)了OLE DB 的所有功能,它在繼承了LE DB優(yōu)點(diǎn)的同時(shí),大大減化了OLE DB的操作。ADO支持建立客戶/服務(wù)器和基于Web的應(yīng)用程序的關(guān)鍵功能,給出了單一或多客戶/服務(wù)器和Web數(shù)據(jù)開(kāi)發(fā)的解決方案。正因?yàn)锳DO具有上述這些技術(shù)優(yōu)勢(shì),所以它的應(yīng)用前景十分看好。
二、三種VB數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)比較及其適用場(chǎng)合
DAO是第一個(gè)面向?qū)ο缶幊探涌冢@露了Microsoft Access/Jet 數(shù)據(jù)庫(kù)引擎,并允許VB開(kāi)發(fā)者直接連接到Access數(shù)據(jù)表。因此,DAO技術(shù)在訪問(wèn)MDB文件格式的數(shù)據(jù)庫(kù)時(shí)有優(yōu)勢(shì)。但如果開(kāi)發(fā)者想使用DAO與Oracle或SQL Server這樣的非MDB 文件格式的數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行通信,則對(duì)數(shù)據(jù)庫(kù)的所有調(diào)用和數(shù)據(jù)輸出都必須經(jīng)過(guò)Access/Jet數(shù)據(jù)庫(kù)引擎,這對(duì)于使用數(shù)據(jù)庫(kù)服務(wù)器的應(yīng)用程序來(lái)說(shuō)是一個(gè)嚴(yán)重的瓶頸。 因此,DAO最適用于單系統(tǒng)應(yīng)用程序或小范圍本地分布使用。
RDO是一個(gè)到ODBC的、面向?qū)ο蟮臄?shù)據(jù)訪問(wèn)接口。它與 DAO Style組合起來(lái),形式上展示出所有ODBC的底層功能和靈活性,提供了對(duì)ODBC數(shù)據(jù)源更直接的訪問(wèn)方式。它兼具 DAO和ODBC API二者的優(yōu)點(diǎn):一方面,它較DAO層次結(jié)構(gòu)簡(jiǎn)單,便于對(duì)象的創(chuàng)建和處理;另一方面,它表露了ODBC的底層結(jié)構(gòu),提供環(huán)境、連接和語(yǔ)句句柄。此外,RDO還提供了用來(lái)訪問(wèn)存儲(chǔ)過(guò)程和復(fù)雜結(jié)果的更多、更復(fù)雜的對(duì)象、屬性和方法,因此,盡管它只能通過(guò)現(xiàn)存的ODBC驅(qū)動(dòng)程序訪問(wèn)關(guān)系數(shù)據(jù)庫(kù),并在訪問(wèn)Jet或ISAM數(shù)據(jù)庫(kù)方面受到某些限制, 但它在許多大型關(guān)系數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的仍被證明是一種比較好的選擇。
ADO是一種新的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),是特別為客戶/服務(wù)器應(yīng)用程序開(kāi)發(fā)而設(shè)計(jì)的。作為DAO和RDO的后繼者,它提供了類似DAO和RDO的功能,主要包括RDO風(fēng)格的功能性。然而,ADO 更加靈活的對(duì)象模型允許其有效地用于各種各樣的應(yīng)用程序。DAO對(duì)象模型主要用于Jet引擎,RDO對(duì)象模型主要用于ODBC數(shù)據(jù)訪問(wèn),而ADO對(duì)象模型主要用于OLE DB。Jet和ODBC主要是針對(duì)數(shù)據(jù)庫(kù)訪問(wèn),而OLE DB對(duì)許多不同的數(shù)據(jù)源提供多機(jī)種環(huán)境的數(shù)據(jù)訪問(wèn)。Microsoft公司已將 ADO作為數(shù)據(jù)存取API的未來(lái)選擇;VBScript以使用ADO,這使它很適合服務(wù)器/數(shù)據(jù)庫(kù)的整合。因此,ADO是客戶/服務(wù)器和基于Web的應(yīng)用程序開(kāi)發(fā)的首選。隨著數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的不斷發(fā)展,ADO將成為數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的主流。
參考文獻(xiàn):
[1]鄭 沫:Microsoft SQL Server 7.0開(kāi)發(fā)實(shí)例精解[M].北京:北京希望電子出版社,2000
[2]張宏民:Visual Basic 6.0編程實(shí)例精解[M].北京:北京希望電子出版社,2000
[3]夏慶梅 熊華鋼:VB訪問(wèn)SQL Server的三種數(shù)據(jù)訪問(wèn)接口的研究[J].計(jì)算機(jī)應(yīng)用研究 2001,18(12),44~47