河南省對外科技交流中心 張成鵬 李怡君
鄭州市第六人民醫(yī)院 李 冬
數(shù)據(jù)庫訪問技術(shù)的研究
河南省對外科技交流中心 張成鵬 李怡君
鄭州市第六人民醫(yī)院 李 冬
隨著計算機(jī)的產(chǎn)生和計算技術(shù)的不斷發(fā)展,以及科技的進(jìn)步特別是信息產(chǎn)業(yè)的發(fā)展,把我們帶入一個全新的信息時代。為此,人們需要收集、加工和處理大量的信息和數(shù)據(jù),數(shù)據(jù)庫技術(shù)是隨著數(shù)據(jù)和信息管理而產(chǎn)生的。在所有的數(shù)據(jù)庫系統(tǒng)中,關(guān)系型數(shù)據(jù)庫是目前應(yīng)用最為廣泛的數(shù)據(jù)庫之一。
由于不同數(shù)據(jù)庫應(yīng)用程序開發(fā)工具有不同的訪問方式,而且不同的數(shù)據(jù)供應(yīng)商又提供了不同的接口,致使用戶在使用開發(fā)工具進(jìn)行數(shù)據(jù)庫應(yīng)用程序開發(fā)時,對不同的訪問方式產(chǎn)生了迷惑和不解,不知道哪一種訪問方式的效率和效果最好。本文,筆者探討了常用數(shù)據(jù)庫應(yīng)用程序開發(fā)工具對不同數(shù)據(jù)庫的訪問方式。其中,數(shù)據(jù)庫應(yīng)用程序開發(fā)工具以VB、ASP為例,數(shù)據(jù)庫以Access、SQLServer和Oracle為例。
VB和ASP都是微軟提供的系統(tǒng)開發(fā)工具。VB是微軟VisualStudio集成開發(fā)工具中的一個開發(fā)工具,它既可以開發(fā)單機(jī)結(jié)構(gòu)數(shù)據(jù)庫應(yīng)用程序,又可以開發(fā)C/S結(jié)構(gòu)的應(yīng)用系統(tǒng)。VB使用DAO、RDO、ADO數(shù)據(jù)庫訪問方式。ASP也是微軟提供的一個開發(fā)工具,主要用于開發(fā)B/S結(jié)構(gòu)的應(yīng)用程序,ASP使用ADO數(shù)據(jù)庫訪問方式。下面,筆者分別介紹一下以上3種方式對Access、SQLServer和Oracle的訪問技術(shù)。
數(shù)據(jù)庫訪問對象(DataAccessObject,簡稱DAO),它是一組以數(shù)據(jù)庫引擎(TheJetDataBaseEngine)為核心而建立起來的動態(tài)連接庫(DLLS)。DAO支持2種不同類型的數(shù)據(jù)庫環(huán)境:利用MicrosoftJetDataBaseEngine,使得DAO成為訪問本地ISAM數(shù)據(jù)庫的最佳手段;利用ODBCDirect,使得DAO在訪問ODBC類型數(shù)據(jù)庫時擁有最小的額外開銷。
1.DAO可存取的數(shù)據(jù)庫。DAO可以存取本地DAO數(shù)據(jù)庫,即MicrosoftAccess和ODBC數(shù)據(jù)庫,包括SQLServer、Oracle、Sybase和任何提供ODBC驅(qū)動的客戶機(jī)/服務(wù)器數(shù)據(jù)庫,以及FoxPro、Lotus、文本文件等內(nèi)容。
以上每個數(shù)據(jù)庫源都提供了不同的安全等級。DAO的主要目的就是將程序員從每個數(shù)據(jù)庫的細(xì)節(jié)中解脫出來而向他們提供統(tǒng)一的API接口。
2.DAO的基本對象。DAO中有3個最基本的對象:DBEngine、Workspce和DataBase。
(1)DBEngine。DBEngine對象用于數(shù)據(jù)庫引擎指定系數(shù)參數(shù),DBEngine中的DefaultType屬性用于描述缺省的Workspace類型。如果其屬性設(shè)置為dbUseODBC,則使用ODBCDitect模式。Workspace對象作為一個打開的數(shù)據(jù)庫的容器。
(2)Workspace。Workspace為打開的數(shù)據(jù)庫提供安全的設(shè)備環(huán)境。在創(chuàng)建DBEngine的同時,程序自動創(chuàng)建了一個缺省的Workspace對象,用來指定訪問數(shù)據(jù)庫的用戶名和口令。
(3)Database。Database對象封裝了數(shù)據(jù)庫存儲器,并且還定義了數(shù)據(jù)庫的表格、關(guān)系、存儲查詢及打開記錄等。
遠(yuǎn)程數(shù)據(jù)對象(RemoteDataObject,簡稱RDO)是位于ODBCAPI之上的一個對象模型層,它依賴ODBCAPI、選定的ODBC驅(qū)動程序以及后端數(shù)據(jù)庫引擎來實(shí)現(xiàn)大部分的功能。RDO具備基本的ODBC處理方法,所以可以直接執(zhí)行大多數(shù)ODBCAPI函數(shù)。RDO已包含在VB4.0/5.0企業(yè)版中,由一個動態(tài)連接庫MSRDO32.DLL來實(shí)現(xiàn)。
1.RDO數(shù)據(jù)庫接口。RDO面向客戶機(jī)/服務(wù)器程序的特殊需求提供了一組對象以輔助這種程序的開發(fā)。與DAO提供的Jet數(shù)據(jù)庫引擎接口不同,RDO提供的是一個直接與ODBCAPI連接的面向?qū)ο蟮某橄髮?。RDO使用ODBCAPI和數(shù)據(jù)庫服務(wù)器驅(qū)動器創(chuàng)建到數(shù)據(jù)庫服務(wù)器的鏈接,創(chuàng)建查詢和用于瀏覽結(jié)果設(shè)計集的游標(biāo),并且依賴數(shù)據(jù)庫服務(wù)器執(zhí)行復(fù)雜的請求過程。它不像DAO那樣,利用Jet數(shù)據(jù)庫引擎進(jìn)行查詢的預(yù)處理和連接管理,而是直接與數(shù)據(jù)庫服務(wù)器交互,這使得RDO特別適用于客戶機(jī)/服務(wù)器型應(yīng)用程序的開發(fā)。
2.RDO的基本對象。要想正確地使用RDO,必須要對其對象模塊結(jié)構(gòu)加以理解。在RDO的對象和集合中,有很多對數(shù)據(jù)庫的狀態(tài)和設(shè)定進(jìn)行操作的屬性,以及對數(shù)據(jù)庫進(jìn)行操作的方法。RDO主要包括rdoEngine對象、rdoEnvironment對象和rdoConnection對象。
(1)rdoEngine對象。最初調(diào)用RDO對象以及RDC(遠(yuǎn)程數(shù)據(jù)控件)時,系統(tǒng)會自動生成rdoEngine對象的附帶事件。rdoEngine用于對RDO全局屬性的參數(shù)和選項(xiàng)進(jìn)行設(shè)置,是RDO的階層結(jié)構(gòu)內(nèi)最上層的對象,包含了其他所有的對象。
(2)rdoEnvironment對象。DAO對象在自動創(chuàng)建rdoEngine對象時,生成rdoEnviroment對象的初始值并保存為rdoEnviroments(0)。在一般情況下,應(yīng)用程序中不必追加rdoEnvironment對象,大多數(shù)只需對已有的rdoEnviroments(0)進(jìn)行操作就可以了。只有在支持1個以上事務(wù)(Transaction)時,需要將用戶名和口令信息分別處理,利用rdoCreateEnvironment方法將特定的用戶名和口令值做成新的rdoEnvironment對象。
(3)rdoConnection對象。rdoConnection對象用于同SQL Server的連接管理,下面是與SQLServer連接的例子。
首先用New關(guān)鍵字聲明一個rdoConnection對象,由此生成獨(dú)立的連接對象,這時它還不是rdoConnection集合的成員。然后在具體連接到SQLServer數(shù)據(jù)庫之前,設(shè)定rdoConnection集合的屬性。
ActiveX數(shù)據(jù)對象(ActiveXDataObject,簡稱ADO)。API是另一種用于開發(fā)訪問OLEDB數(shù)據(jù)源應(yīng)用程序的API。有很多種程序設(shè)計語言都支持ADO,包括VisualBasic、VisualC++、VBScript、VisualJ++和ActiveServerPage等。
1.OLEDB數(shù)據(jù)庫接口。OLEDB是COM模型的數(shù)據(jù)庫接口。它是一系列的接口集合,介紹了一種通用的數(shù)據(jù)訪問方法。也就是說,OLEDB并不局限于ISAM、JET甚至關(guān)系數(shù)據(jù)源,而是能夠用于處理任何類型的數(shù)據(jù)。OLEDB向應(yīng)用程序提供1個統(tǒng)一的數(shù)據(jù)訪問方法,而不考慮它們的格式和存儲方法。ADO集合了DAO和RDO的優(yōu)點(diǎn),而且它不像DAO和RDO那樣嚴(yán)格遵循對象的層次關(guān)系。這就意味著ADO對象更容易創(chuàng)建和操縱,因?yàn)樗鼈兌伎梢灾苯拥貏?chuàng)建和管理。ADO更適用于開發(fā)C/S和B/S結(jié)構(gòu)的應(yīng)用程序。圖1說明了一個典型ADO應(yīng)用程序的配置。
2.ADO的基本對象。
(1)Connection對象。一個Connection對象代表1個到指定數(shù)據(jù)源的成功連接,應(yīng)用程序通過鏈接訪問數(shù)據(jù)源,也可以直接訪問數(shù)據(jù)源,或者通過類似MicrosoftInternetInformationServer的中間層間接訪問數(shù)據(jù)源。鏈接成功后,Connection以對象的形式存在。
(2)Command對象。Command對象是對數(shù)據(jù)源執(zhí)行的一系列操作的定義。使用Command對象來查詢數(shù)據(jù)庫并返回數(shù)據(jù)集對象形式的查詢結(jié)果。Command對象指定變量和參數(shù)來完成對數(shù)據(jù)的操作,如添加記錄、刪除記錄和更新紀(jì)錄等。
(3)Recordset對象。如果命令行指定數(shù)據(jù)以表的形式組織,執(zhí)行命令后將返回相應(yīng)的數(shù)據(jù)集。通過數(shù)據(jù)集可以對記錄以及組成記錄的列進(jìn)行各種操作,如添加、修改和刪除等操作。