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