|
淺談visual basic 6.0 的數(shù)據(jù)庫功能
李昫
visual basic(以下簡稱vb)是微軟公司為企業(yè)應用軟件而提供的開發(fā)工具。它之所以越來越受到用戶的歡迎,,除了其功能強大,、使用方便外,還有一個很重要的特點是它的強大數(shù)據(jù)庫功能,,尤其是它的最新版本vb6.0更是為開發(fā)者提供了一個全面的數(shù)據(jù)庫解決方案,。下面,我們通過分析三種數(shù)據(jù)庫接口控件的特點來加以說明,。
我們打開vb6.0,,創(chuàng)建一個vb企業(yè)版(或專業(yè)版)工程,在工具欄中會我們發(fā)現(xiàn)有三個數(shù)據(jù)庫接口控件,,即data,、msrdc和adodc。他們都是數(shù)據(jù)庫訪問的接口控件,,但有什么差別,,哪種最適合我們的應用程序,通過分析三種數(shù)據(jù)訪問接口的對象模型,、層次結構和接口的各層,,掌握每種數(shù)據(jù)訪問接口的特性和優(yōu)點,我們就可以找到答案,。
實際上,,data、msrdc和adodc分別代表了三種數(shù)據(jù)訪問技術,,即數(shù)據(jù)訪問對象dao(data access objects)技術,、遠程數(shù)據(jù)對象rdo(remote data objects)技術和activex數(shù)據(jù)對象ado(activex data objects)技術。
dao(數(shù)據(jù)訪問對象)/jet
首先我們看一下microsoft jet數(shù)據(jù)庫的dao,,也稱為dao/jet,。這種方式的控件(既data控件)我們在vb3.0上就已經(jīng)用過。它是jet數(shù)據(jù)庫引擎的接口,,專門用來訪問本地的jet和諸如access,、btrieve dbase、foxpro和paradox等isam數(shù)據(jù)庫,。顯然,,當訪問本地數(shù)據(jù)時,采用dao/jet是一種最理想的方法,。但是,,當要與遠程數(shù)據(jù)庫打交道時,,雖然dao/jet也能訪問odbc數(shù)據(jù)源,但性能不太理想,。另外,,與直接調用api接口和使用rdo相比,處理遠程數(shù)據(jù)庫的功能有限,。
dao/odbc direct
從dao3.5開始(vb6.0使用的是dao3.51版),,由于加入了odbc direct,使dao可以提供一個到遠程數(shù)據(jù)對象(remote data objects)的接口,。因為odbd direct不使用消耗資源的jet數(shù)據(jù)庫引擎,,當訪問遠程數(shù)據(jù)源時,它的性能超過dao/jet,,但不具備dao/jet數(shù)據(jù)引擎中具備的數(shù)據(jù)庫安全功能,。圖1是dao/odbc direct的對象模型。
圖1 dao/odbc direct對象模型
odbc direct的dao對象模型的結構沒有dao/jet數(shù)據(jù)引擎的結構復雜,。雖然odbc direct執(zhí)行的功能與rdo不一樣,,但它可以讓我們通過一個類似dao的對象模型來使用rdo的遠程數(shù)據(jù)訪問特性。
rdo(遠程數(shù)據(jù)對象)
rdo提供了一系列的對象,,用來滿足遠程數(shù)據(jù)訪問的特殊要求,。在 odbc api 和驅動程序管理器之上,rdo 實現(xiàn)了很薄的一個代碼層,,用來建立連接,、創(chuàng)建結果集和游標,并且使用盡可能少的工作站資源執(zhí)行復雜的過程,。如果代碼創(chuàng)建了 odbcdirect workspace 對象,,那么 rdo 也是可以被 dao 訪問的。圖2說明了rdo的對象模型,。
一直以來,,rdo都是用于visual basic的所有基于com的數(shù)據(jù)訪問接口中性能最好的一種。利用 rdo 和 remotedata 控件,,應用程序不需使用本地的查詢處理程序即可訪問 odbc 數(shù)據(jù)源,。這意味著,在訪問遠程數(shù)據(jù)庫引擎時,,可以獲得更好的性能與更大的靈活性,。因此,,rdo特別適用于對遠程odbc數(shù)據(jù)源的訪問,。
圖2 rdo對象模型
雖然rdo不支持某些dao/jet特性,例如基于表的接口或ddl(data definition language 數(shù)據(jù)定義語言),,但rdo支持穩(wěn)固的企業(yè)級數(shù)據(jù)功能,。當與通過odbc驅動器(如oracle和sql server)訪問的關系數(shù)據(jù)打交道時,,會知道這種功能最適合于rdo方式的控件(即我們在vb6.0中所見到的msrdc控件)。
ado(activex數(shù)據(jù)對象)
ado最初是專門用于active server page的數(shù)據(jù)訪問接口,,后來逐漸演變成滿足所有數(shù)據(jù)訪問需要的完整解決辦法,。ado的對象模型是所有數(shù)據(jù)訪問接口對象模型中最簡單的一種。如圖3所示,。注意,,ado對象模型與dao和rdo相比是多么的簡單。
早在1988年初,,作為一種發(fā)展策略,,microsoft就推出了universal data access用于讀取所有類型的信息,而不管數(shù)據(jù)存儲在本機上,,還是存儲在遠程機上,。這種計劃是建立在開放工業(yè)標準(例如odbc和distributed component object model)基礎之上的。universal data acces由許多組件組成,,其中就包括ado,,它取代了dao和rdo兩種技術。ado的優(yōu)勢就在于它既能在visual basic程序中使用,,也能在由active server page構成的web站點上使用,。因此,ado技術成為visual basic數(shù)據(jù)庫功能的一次新的突破,。
圖3 ado對象模型
ado是ole db的com(component object model)接口,,是microsoft的最新的對通用數(shù)據(jù)的全功能多機種接口。那什么是ole db呢,?ole db是一種底層編程接口,,用來訪問許多不同類型的數(shù)據(jù)源,其中包括消息,、文件系統(tǒng)以及其他一些非傳統(tǒng)的數(shù)據(jù)源,。ole db是一個由component object model(com)接口組成的集合,用來隱藏創(chuàng)建數(shù)據(jù)訪問服務過程中的細節(jié),。最新vb6.0提供了一些ole db接口,。我們的應用程序不能直接使用ole db接口,而須象使用dao和rdo與odbc(open database connectivity)層交互一樣,, 使用ado來與ole db層建立通訊,。ado提供了一系列可編成對象,用來存放由ole db提供者提供的數(shù)據(jù),。
使用dao,,在能創(chuàng)建一個數(shù)據(jù)集之前,必須首先建立和保持對數(shù)據(jù)源的連接。這意味著不僅代碼行要多,,而且需要管理的對象引用也較多,,因此,開發(fā)出來的應用程序開銷也較多,。使用ado,,resordset對象是數(shù)據(jù)庫的主要接口,使用很少的代碼就可以訪問一個表或記錄集,。這意味著使用ado生成一個記錄需要的代碼較少,,開銷也就小。新版vb6.0的adodc控件訪問記錄集和更新數(shù)據(jù)庫需要的資源更少,。
dao,、rdo和ado接口的各層
連接jet數(shù)據(jù)庫引擎的dao/jet接口,是一個消耗資源的厚層,,它可以直接訪問jet和isan數(shù)據(jù)庫,,或者通過對odbc api的接口,訪問其他的關系數(shù)據(jù)庫,。應該說,,當訪問本地的jet和isam數(shù)據(jù)庫時,dao/jet的性能最佳,。
圖4 dao,、rdo和ado的接口層
利用dao/odbc direct的層,這層與rdo相連接,,而rdo又通過odbc api與遠程數(shù)據(jù)源相連接,。雖然用odbc direct連接的層比用jet連接的層多兩層,但這些層很“薄”,,所以用odbc direct訪問遠程數(shù)據(jù)源要比dao/jet性能好得多,。
rdo基本上是odbc api外面的一層薄薄的“封皮(wrapper)。到目前為止,,在所有訪問遠程數(shù)據(jù)源的數(shù)據(jù)訪問層中,,它的性能最高。圖4說明了從應用程序往下到數(shù)據(jù)源之間存在的各種數(shù)據(jù)訪問層,。
ole db是microsoft最新的數(shù)據(jù)訪問工具,,它可以提供訪問各種各樣的數(shù)據(jù)源的手段。ole db不能從visual basic直接進行訪問,,但可以通過稱為ado的com接口對它進行訪問,,ado可用于各種程序設計語言,包括象vbscript和active server page這樣的語言,。因此,,ado也是開發(fā)基于web數(shù)據(jù)庫應用軟件的最佳手段,。
結束語
隨著internet/intranet的普及和應用,開發(fā)出基于web數(shù)據(jù)庫的應用程序成為主流,。而vb6.0 的出現(xiàn),為我們提供了開發(fā)這方面應用程序的一個功能強大的開發(fā)工具,。了解ado,、rdo和dao之間的特點和差別,更有助于我們在開發(fā)應用程序時根據(jù)應用程序的特點進行選擇,。但有一點,,隨著ado的升級和改進,它將有可能替代其他的數(shù)據(jù)訪問接口,。但有一種接口它不易替代,,這種接口就是dao,因為dao對jet數(shù)據(jù)庫訪問的支持功能非常好,。
|
|