?? 20.2 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù).txt
字號(hào):
20.2 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)
在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)據(jù)庫(kù)技術(shù)被越來(lái)越廣泛地應(yīng)用。很多項(xiàng)目都存在著大量的數(shù)據(jù)需要存儲(chǔ),通常都會(huì)采用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)這些數(shù)據(jù)。最初,廠商推出一個(gè)新的數(shù)據(jù)庫(kù)產(chǎn)品時(shí),
相應(yīng)地,他會(huì)為程序員提供一套訪問(wèn)該數(shù)據(jù)庫(kù)的接口,即 API。不同的數(shù)據(jù)庫(kù)廠商所提供的訪問(wèn)接口是不一樣的。這樣,在使用一個(gè)新的數(shù)據(jù)庫(kù)時(shí),就要學(xué)習(xí)一套新的 Api,當(dāng)然這就加大了開(kāi)發(fā)數(shù)據(jù)庫(kù)的難度,也不利于數(shù)據(jù)庫(kù)在軟件開(kāi)發(fā)過(guò)程中的應(yīng)用。因此,后來(lái) Microsoft就推出了一些標(biāo)準(zhǔn)的訪問(wèn)數(shù)據(jù)庫(kù)的技術(shù)。
. ODBC C Open Database Connectivity,開(kāi)放數(shù)據(jù)庫(kù)互聯(lián))
ODBC是 20世紀(jì) 80年代末 90年代初出現(xiàn)的技術(shù),它為編寫(xiě)關(guān)系數(shù)據(jù)庫(kù)的客戶軟件提供了一種統(tǒng)一的接口。 ODBC提供一個(gè)單一的 API.可用于處理不同數(shù)據(jù)庫(kù)的客戶應(yīng)用程序。使用 ODBC API的應(yīng)用程序可以與任何具有 ODBC驅(qū)動(dòng)程序的關(guān)系數(shù)據(jù)庫(kù)進(jìn)行通信。現(xiàn)在,絕大多數(shù)主流關(guān)系數(shù)據(jù)庫(kù)都提供了 ODBC驅(qū)動(dòng)程序。那么我們使用 ODBCAPI就可以訪問(wèn)這些數(shù)據(jù)庫(kù)。如圖 20.14所示顯示了 ODBC的體系架構(gòu)。
圖 20.14 ODBC體系架構(gòu)
我們所編寫(xiě)的客戶程序直接和 ODBC驅(qū)動(dòng)程序管理器打交道,后者利用 ODBC驅(qū)動(dòng)程序所提供的 API訪問(wèn)數(shù)據(jù)庫(kù)。在訪問(wèn)不同數(shù)據(jù)庫(kù)時(shí),需要指定相應(yīng)的 ODBC驅(qū)動(dòng)程序,而后者又由 ODBC程序管理器去調(diào)用,它會(huì)將客戶的請(qǐng)求轉(zhuǎn)換為相應(yīng)的 ODBC驅(qū)動(dòng),傳遞給數(shù)據(jù)庫(kù)。
. DAO CData Access Object,數(shù)據(jù)訪問(wèn)對(duì)象)
DAO就是一組 Microsoft Access/Jet數(shù)據(jù)庫(kù)引擎的 COM自動(dòng)化接口。 DAO不像 ODBC那樣是面向 C/C++程序員的,它是微軟提供給 Visual Basic開(kāi)發(fā)人員的一種簡(jiǎn)單的數(shù)據(jù)訪問(wèn)方法,用于操縱 Access數(shù)據(jù)庫(kù)。
. RDO CRemote Data Object,遠(yuǎn)程數(shù)據(jù)對(duì)象)
由于 RDO直接調(diào)用 ODBC API C而不是像 DAO那樣通過(guò) Jet引擎),因此,可以為使用關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用程序提供更好的性能。
. OLEDB (對(duì)象鏈接與嵌入數(shù)據(jù)庫(kù))
OLEDB在兩個(gè)方面對(duì) ODBC進(jìn)行了擴(kuò)展。首先, OLEDB提供了一個(gè)數(shù)據(jù)庫(kù)編程的 COM接口:第二, OLEDB提供了一個(gè)可用于關(guān)系型和非關(guān)系型數(shù)據(jù)源的接口,而 ODBC只能訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)。通常我們所說(shuō)的數(shù)據(jù)庫(kù)都是指關(guān)系型數(shù)據(jù)庫(kù)。但是數(shù)據(jù)庫(kù)的概念,從廣義上來(lái)說(shuō),除了關(guān)系型數(shù)據(jù)庫(kù)以外,還包括其他格式的數(shù)據(jù)源,包括電子表格、文本文件。 OLE DB的兩個(gè)基本結(jié)構(gòu)是 OLE DB提供程序 ( Provider)和 OLE DB用戶程序 C Consumer)。
. ADO CActiveX Data Object, ActiveX數(shù)據(jù)對(duì)象)
ADO建立在 OLE DB之上。 ADO是一個(gè) OLE DB用戶程序,即它本身也是一個(gè)
Consumer。使用 ADO的應(yīng)用程序都要間接地使用 OLEDB o ADO簡(jiǎn)化了 OLEDB,提供了對(duì)自動(dòng)化的支持,使得像 VBScript這樣的腳本語(yǔ)言也能夠使用 ADO訪問(wèn)數(shù)據(jù)庫(kù)。
上述幾種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)中, DAO和 RD。這兩種技術(shù)己經(jīng)很少使用了,隨著時(shí)代的發(fā)展,它們將逐漸退出歷史的舞臺(tái)。而 OLEDB和 ADO這兩種是比較新的技術(shù)。 OLEDB的功能非常強(qiáng)大,但是它對(duì)自動(dòng)化的支持不是很好。因此像一些自動(dòng)化的腳本語(yǔ)言,例如 VBScript就不能使用 OLEDB訪問(wèn)數(shù)據(jù)庫(kù)。為了更好地支持自動(dòng)化,微軟在 OLEDB的基礎(chǔ)上開(kāi)發(fā)了 ADO,便于像 VBScript這樣的腳本語(yǔ)言,以及像 VB、 Delphi這樣的語(yǔ)言很方便地利用 ADO去訪問(wèn)數(shù)據(jù)庫(kù)。但是有一點(diǎn)需要注意, ADO本身是一個(gè) OLEDB的用戶程序。 VC I I對(duì)利用 OLE DB訪問(wèn)數(shù)據(jù)庫(kù)提供了很好的支持,而且速度也比較快,我們可以利用 VC++編寫(xiě) OLEDB用戶程序。如圖 20.15所示是 OLEDB的體系結(jié)構(gòu)圖。
圖 20.15 OLE DB體系結(jié)構(gòu)
從圖 20.15可知, ADO和我們編寫(xiě)的 OLEDB訪問(wèn)程序都屬于 OLEDB用戶程序。由此可知,如果采用 ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)的話,實(shí)際上調(diào)用過(guò)程是: ADO客戶程序通過(guò) ADO再訪問(wèn) OLEDB提供程序,這樣訪問(wèn)速度就要慢一些。但是因?yàn)?ADO對(duì)自動(dòng)化提供了很好的支持,所以在 VBScript、 VB這類(lèi)語(yǔ)言中利用 ADO訪問(wèn)數(shù)據(jù)庫(kù)是很方便的。
OLEDB用戶程序利用不同的 OLEDB提供程序可以訪問(wèn)不同的數(shù)據(jù)源,包括關(guān)系型數(shù)據(jù)庫(kù)、電子表格、電子郵件,以及其他的非關(guān)系型存儲(chǔ),只要這些數(shù)據(jù)源提供了相應(yīng)的 OLEDB提供程序。有時(shí),數(shù)據(jù)源沒(méi)有提供相應(yīng)的 OLEDB提供程序,我們還可以自己為這些數(shù)據(jù)源編寫(xiě)一個(gè) OLEDB提供程序,利用 VC++開(kāi)發(fā)這樣的程序也不是很困難。
如果某個(gè)關(guān)系型數(shù)據(jù)庫(kù)沒(méi)有 OLE DB的提供程序,那么可以利用訪問(wèn) ODBC的 OLE DB提供程序去訪問(wèn) ODBC,然后再利用 ODBC去訪問(wèn)支持 ODBC的數(shù)據(jù)庫(kù)。可見(jiàn), OLE DB實(shí)現(xiàn)的功能是非常強(qiáng)大的。
本章將主要介紹 ADO訪問(wèn)數(shù)據(jù)庫(kù)的情況。對(duì)于其他技術(shù),讀者可以自行查閱相應(yīng)書(shū)籍。 ADO中有以下三個(gè)核心對(duì)象。
. Connection對(duì)象
Connection對(duì)象表示到數(shù)據(jù)庫(kù)的連接,它管理應(yīng)用程序和數(shù)據(jù)庫(kù)之間的通信。下面將介紹的 Recordset和 Cornmand對(duì)象都有一個(gè) ActiveConnection屬性,該屬性用來(lái)引用 Connection對(duì)象。
. Cornmand對(duì)象
Cornmand對(duì)象用米處理重復(fù)執(zhí)行的查詢(xún),或處理需要檢查在存儲(chǔ)過(guò)程調(diào)用中的輸出或返回參數(shù)的值的查詢(xún)。
. Recordset對(duì)象
Recordset對(duì)象用來(lái)獲取數(shù)據(jù)。 Recordset對(duì)象存放查詢(xún)的結(jié)果,這些結(jié)果由數(shù)據(jù)的行 (稱(chēng)為記錄)和列(稱(chēng)為宇段〉組成。每一列都存放在Recordset的Fields集合中的一個(gè)Field對(duì)象中。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -