仇偉明
(無錫商業(yè)職業(yè)技術(shù)學(xué)院, 江蘇 無錫 214153)
基于Visual Basic環(huán)境下數(shù)據(jù)庫訪問技術(shù)的研究
仇偉明
(無錫商業(yè)職業(yè)技術(shù)學(xué)院, 江蘇 無錫 214153)
對VB提供的3種不同數(shù)據(jù)庫訪問技術(shù),即數(shù)據(jù)訪問對象(Data Access Object, DAO)、遠(yuǎn)程數(shù)據(jù)對象(Remote Data Object, RDO)、Active X數(shù)據(jù)對象(ActiveX Data Object, ADO)做了對比研究,并就各VB數(shù)據(jù)庫訪問技術(shù)的原理和特點(diǎn)做了簡要闡述。
VB; 數(shù)據(jù)庫; 訪問技術(shù)
VB是由Microsoft公司推出的包含開發(fā)及編譯平臺(tái)的基于對象觸發(fā)事件驅(qū)動(dòng)的語言,它具有靈活易學(xué)的特點(diǎn),并且對數(shù)據(jù)庫具有很強(qiáng)的管理功能。
在VB環(huán)境下,可以使用DAO,RDO,ADO這3種技術(shù)來訪問數(shù)據(jù)庫中的數(shù)據(jù)。根據(jù)在訪問數(shù)據(jù)時(shí)是否需要編寫代碼,3種數(shù)據(jù)庫訪問技術(shù)又都具有以下兩種具體的訪問形式:使用Data控件的非編程訪問方式,即通過對控件的數(shù)據(jù)綁定來訪問數(shù)據(jù)庫;使用對象模型的編程訪問方式,即通過定義對象和編寫代碼來訪問數(shù)據(jù)庫。
DAO基于使用一種接口來訪問多種類型的數(shù)據(jù)這一設(shè)計(jì)思想而設(shè)計(jì)的。它將Microsoft連接性引擎技術(shù)(Joint Engine Technology, JET)數(shù)據(jù)庫引擎外顯,并允許VB開發(fā)者通過開放式數(shù)據(jù)連接(Open Database Connectivity, ODBC)直接連接到數(shù)據(jù)庫并訪問其中的數(shù)據(jù)表。
在VB中提供了與DAO相關(guān)的兩種具體的數(shù)據(jù)庫訪問形式:Data控件和DAO對象模型。
Data控件給出較少的訪問現(xiàn)存數(shù)據(jù)庫的功能,這些功能不需要通過編程來實(shí)現(xiàn),VB可把DAO封裝成Data控件,Data控件將數(shù)據(jù)的值作為屬性,數(shù)據(jù)的查詢作為方法,數(shù)據(jù)值的變化作為事件,通過設(shè)置相應(yīng)的DatabaseName屬性和RecordSource屬性就可以將Data控件與數(shù)據(jù)庫中的記錄源連接起來[1],通過Data控件來對數(shù)據(jù)庫進(jìn)行操作,其操作對象是數(shù)據(jù)表中的記錄和字段。
DAO對象模型則是通過編程來完整的定義操作對象從而訪問數(shù)據(jù)庫的。DAO提供了兩種不同的對象模型:一種是通過Jet數(shù)據(jù)庫引擎來訪問數(shù)據(jù);另一種是通過ODBC Direct來訪問數(shù)據(jù)[2],這兩種對象模型都是層次結(jié)構(gòu)的。使用Jet的DAO對象模型和使用ODBC Direct的DAO對象模型分別如圖1和圖2所示。
圖1 使用Jet的DAO對象模型
圖2 使用ODBC Direct的DAO對象模型
使用Jet的DAO對象模型中重要對象說明:DBEngine對象在工程項(xiàng)目中引用到DAO時(shí)會(huì)被自動(dòng)創(chuàng)建;Error對象在發(fā)生數(shù)據(jù)庫操作錯(cuò)誤時(shí)處理錯(cuò)誤和保存相關(guān)信息;Workspace對象管理一個(gè)數(shù)據(jù)庫會(huì)話;Database對象對一個(gè)數(shù)據(jù)庫進(jìn)行創(chuàng)建或打開;TableDef對象可以訪問單個(gè)數(shù)據(jù)表的所有字段(Field對象)和數(shù)據(jù)表的索引(Index對象);QueryDef對象定義一個(gè)查詢;Recordset對象代表一個(gè)表的記錄集或者查詢命令執(zhí)行的結(jié)果;Relation對象用來定義不同數(shù)據(jù)表或查詢中字段之間的相互關(guān)系;Field對象對應(yīng)著一個(gè)數(shù)據(jù)表中的某個(gè)字段;User對象代表了數(shù)據(jù)庫的某個(gè)用戶;Group對象則包含了具有相同權(quán)限的一組用戶。
與使用Jet的DAO對象模型相比較,使用ODBC Direct的DAO對象模型去掉了數(shù)據(jù)庫中的處理對象,新增了Connection對象。Connection對象代表一個(gè)到指定數(shù)據(jù)源的成功連接[3]。
使用Jet的DAO對象模型特點(diǎn)是支持多表連接的Recordset對象中數(shù)據(jù)的更新;支持不同數(shù)據(jù)源中數(shù)據(jù)表的連接;支持對DDL(數(shù)據(jù)定義語言)的操作;支持將ODBC數(shù)據(jù)源中的數(shù)據(jù)與窗體緊密結(jié)合。使用ODBC Direct的DAO對象模型特點(diǎn)是支持直接訪問ODBC數(shù)據(jù)源,進(jìn)而使程序代碼執(zhí)行速度更快、效率更高;支持訪問特定的服務(wù)器;支持?jǐn)?shù)據(jù)的批量更新。
DAO可以識(shí)別3類數(shù)據(jù)庫:VB數(shù)據(jù)庫,也就是*.mdb數(shù)據(jù)庫;索引順序訪問方法(Indexed Sequential Access Method, ISAM)數(shù)據(jù)庫;ODBC數(shù)據(jù)庫。
使用DAO技術(shù)可以對Microsoft Jet引擎數(shù)據(jù)庫方便的進(jìn)行訪問,但由于Microsoft Jet不支持多線程,因此,必須對調(diào)用到應(yīng)用程序主線程的所有DAO進(jìn)行限制。
RDO提供了一系列對象,用來滿足遠(yuǎn)程數(shù)據(jù)訪問的特殊要求[4]。它是位于ODBC應(yīng)用程序接口之上的對象模型薄層,它基于ODBC應(yīng)用程序接口、選定的ODBC驅(qū)動(dòng)程序以及后端數(shù)據(jù)庫引擎來實(shí)現(xiàn)大部分的功能,它具備基本的ODBC處理方法,可以對大部分ODBC 應(yīng)用程序接口函數(shù)直接進(jìn)行執(zhí)行,從形式上凸顯出所有ODBC的底層功能以及靈活性,是遠(yuǎn)程訪問ODBC關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的有效界面接口。
RDO是基于DAO衍生出來的,兩者之間最大的不同在于其數(shù)據(jù)庫模式。DAO操作是針對數(shù)據(jù)表中的記錄和字段,而RDO操作是針對行和列的,也就是說DAO是ISAM模式,RDO是關(guān)系模式。此外,DAO是訪問Jet引擎(Jet是ISAM)的接口,而RDO則是訪問ODBC的接口。因此,RDO是綜合了DAO/Jet,VBSQL/DB Lib,ODBC三者優(yōu)點(diǎn)的對象,其對象模型如圖3所示。
圖3 RDO對象模型
RDO對象模型中重要對象說明:rdoEngine對象在應(yīng)用程序第一次訪問RDO時(shí)會(huì)自動(dòng)創(chuàng)建;rdoError對象當(dāng)發(fā)生錯(cuò)誤時(shí)被自動(dòng)創(chuàng)建,其用于處理RDO所產(chǎn)生的ODBC錯(cuò)誤和消息;rdoEnvironment對象為連接及事務(wù)作用域的一個(gè)邏輯集合做定義;rdoConnection對象表示分配或打開遠(yuǎn)程數(shù)據(jù)源上特定數(shù)據(jù)庫之間的一個(gè)連接;rdoQuery對象是定義一個(gè)SQL查詢;rdoResultset對象表示對一個(gè)查詢所產(chǎn)生的數(shù)據(jù)行直接運(yùn)行;rdoTable對象表示存儲(chǔ)定義一個(gè)基本表或SQL視圖;rdoParameter對象表示與rdoQuery相關(guān)聯(lián)的某個(gè)參數(shù);rdocolumn對象表示含有公共數(shù)據(jù)類型和公共屬性的列數(shù)據(jù);rdoPrepareStatement對象預(yù)先定義了一個(gè)查詢。
RDO只有在后臺(tái)(服務(wù)器端)有數(shù)據(jù)庫存在的前提下才可運(yùn)行,它是針對SQL Server和Oracle等大型關(guān)系數(shù)據(jù)庫而特別設(shè)計(jì)的。VB完全集成RDO,RDO具有直接訪問SQL Server存儲(chǔ)過程、支持Transact-SQL以及Visual Database Tools的集成化等優(yōu)勢。RDO的特點(diǎn)是:應(yīng)用程序可訪問ODBC數(shù)據(jù)源而不需要使用本地的查詢處理程序;可以執(zhí)行與數(shù)據(jù)定義或數(shù)據(jù)操作有關(guān)的查詢;可以執(zhí)行查詢操作并對任意數(shù)量的結(jié)果集進(jìn)行處理;可以限制返回或處理的數(shù)據(jù)行數(shù);可以對簡單的無游標(biāo)結(jié)果集或更為復(fù)雜的游標(biāo)進(jìn)行創(chuàng)建;可以在不妨礙執(zhí)行查詢的情況下,對遠(yuǎn)程數(shù)據(jù)資源產(chǎn)生的所有信息和錯(cuò)誤進(jìn)行監(jiān)控。許多大型關(guān)系數(shù)據(jù)庫開發(fā)者經(jīng)常選用RDO來訪問數(shù)據(jù)庫。
ADO是DAO,RDO的后繼產(chǎn)物,實(shí)際上是一種面向?qū)ο蟮?,提供訪問各種數(shù)據(jù)類型的連接機(jī)制[5]。它通過對對象鏈接和嵌入數(shù)據(jù)庫(Object Link and Embedding DataBase, OLE DB)進(jìn)行封裝,具備了OLE DB所有的功能,OLE DB是一種底層數(shù)據(jù)訪問界面接口,是用于第三方驅(qū)動(dòng)程序商家開發(fā)輸出數(shù)據(jù)源到ADO的數(shù)據(jù)庫組件,其不能被VB直接調(diào)用[6]。ADO通過OLE DB可以訪問任何類型的數(shù)據(jù)源。
在VB中提供了兩種與ADO有關(guān)的訪問數(shù)據(jù)的方法:Data控件和ADO對象模型。
使用ADO Data控件可以快速建立數(shù)據(jù)提供者與數(shù)據(jù)綁定控件之間的連接[7]。ADO Data控件通過Recordset對象支持訪問數(shù)據(jù)庫中數(shù)據(jù),并允許將指針在不同記錄之間移動(dòng),從而對記錄進(jìn)行顯示和操縱。ADO Data控件雖然能夠操作、訪問數(shù)據(jù)庫,但是它并不能夠顯示數(shù)據(jù)庫中數(shù)據(jù)的內(nèi)容。ADO Data控件需要與其它控件結(jié)合使用。這些與ADO Data控件結(jié)合使用的控件(DataList控件、DataCombo控件和Datagrid控件)稱之為“數(shù)據(jù)察覺控件”。在對Data控件中數(shù)據(jù)的相關(guān)屬性設(shè)置好的前提下,無需編寫代碼或者只需編寫少量的代碼就可以達(dá)到數(shù)據(jù)訪問的目的,同時(shí),可以結(jié)合數(shù)據(jù)察覺控件來顯示和修改數(shù)據(jù)。
ADO對象模型如圖4所示。
圖4 ADO對象模型
ADO對象模型“擴(kuò)展”了DAO和 RDO 所使用的對象模型,這意味著它包含較少的對象,更多的屬性、方法以及事件。ADO同DAO和RDO一樣,其對象模型是層次型的,即一個(gè)較低的數(shù)據(jù)對象是幾個(gè)較高層次對象的子對象[8]。
ADO對象模型中重要對象說明:Connection對象包含相關(guān)數(shù)據(jù)提供程序和結(jié)構(gòu)描述的信息;Command對象包含某個(gè)命令;Recorded對象用來對數(shù)據(jù)操作返回的記錄集進(jìn)行存儲(chǔ);Errors對象包含數(shù)據(jù)提供程序出錯(cuò)時(shí)的擴(kuò)展信息;Properties對象包含某個(gè)ADO對象提供程序的定義特征; Parameter對象包含Command對象的某單個(gè)參數(shù)的信息;Fields對象包含記錄集中數(shù)據(jù)的某單個(gè)列的信息[8]。
使用ADO Data控件的特點(diǎn)是:ADO Data控件封裝了相應(yīng)代碼的功能;簡化了數(shù)據(jù)表瀏覽、添加、修改記錄方面的操作。使用ADO模型的特點(diǎn)是:靈活性強(qiáng),便于使用,可以動(dòng)態(tài)的指定數(shù)據(jù)源,可以打開同一個(gè)數(shù)據(jù)源上多個(gè)記錄集或執(zhí)行同一個(gè)數(shù)據(jù)源上多個(gè)命令,可以建立獨(dú)立的連接對象;可以操作任何的OLE DB數(shù)據(jù)源,不損失任何OLE DB的功能;支持多種編程語言;可擴(kuò)展性好,能夠基于數(shù)據(jù)提供者屬性集合動(dòng)態(tài)地對數(shù)據(jù)提供者進(jìn)行指定。
介紹的3種在VB環(huán)境下的數(shù)據(jù)訪問技術(shù),每一種都代表了數(shù)據(jù)庫訪問技術(shù)經(jīng)歷和發(fā)展的一個(gè)重要階段,其中ADO可以快速而方便地訪問不同數(shù)據(jù)源,占用內(nèi)存少[9],所以其發(fā)展前途也很好,已經(jīng)成為當(dāng)前數(shù)據(jù)庫開發(fā)的主流,但是,ADO并不完全支持或兼容DAO和RDO的所有功能,所以需要熟練掌握3種數(shù)據(jù)庫訪問技術(shù),從而出色完成VB環(huán)境下數(shù)據(jù)庫的開發(fā)工作。
[1] 李國華.個(gè)性化教學(xué)設(shè)計(jì)建模的研究與實(shí)現(xiàn)[D]:[碩士學(xué)位論文].南京:東南大學(xué),2005.
[2] 馬思紅,陸揚(yáng).基于VB的SQL Server數(shù)據(jù)庫訪問技術(shù)[J].電腦與電信,2007(10):56-57.
[3] 谷震離.VB遠(yuǎn)程訪問SQL Server數(shù)據(jù)庫技術(shù)分析與比較[J].廣東經(jīng)濟(jì)管理學(xué)院學(xué)報(bào),2005(2):71-75.
[4] 張仁霖.淺談Visual Basic 6.0的數(shù)據(jù)庫功能[J].安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報(bào),2006(5):95-96.
[5] 范乃英,王蘭林.談VB的數(shù)據(jù)庫訪問技術(shù)[J].河南財(cái)政稅務(wù)高等??茖W(xué)校學(xué)報(bào),2008(6):81-83.
[6] 張勇.VB數(shù)據(jù)庫開發(fā)方案的比較[J].宿州教育學(xué)院學(xué)報(bào),2003(4):71-73.
[7] 張宗飛.VB中基于ADO的數(shù)據(jù)庫訪問技術(shù)分析及應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2008(3):53-56,165.
[8] 張磊.VB中用ADO對象動(dòng)態(tài)訪問Access[J].長春師范學(xué)院學(xué)報(bào),2004(5):36-39.
[9] 陳長青,王萍.數(shù)據(jù)庫技術(shù)在光電設(shè)備遠(yuǎn)程控制系統(tǒng)中的應(yīng)用[J].長春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2007,28(3):257-260.
Research of database access technology based on Visual Basic environment
QIU Wei-ming
(Wuxi Institute of Commerce, Wuxi 214153, China)
Three different database access technologies based on VB, which are Data Access Object (DAO), Remote Data Object (RDO) and ActiveX Data Object (ADO) respectively, are studied. The principles and features of the technologies are discussed in detail.
VB; database; access technology.
2014-05-20
國家教師科研十二五規(guī)劃重點(diǎn)課題基金資助項(xiàng)目(GJL1321360)
仇偉明(1980-),男,漢族,江蘇無錫人,無錫商業(yè)職業(yè)技術(shù)學(xué)院講師,碩士,主要從事計(jì)算機(jī)網(wǎng)絡(luò)、軟件工程方向研究,E-mail:qiuweiming0617@163.com.
TP 399
A
1674-1374(2014)05-0490-05