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