




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第11章數(shù)據(jù)庫應(yīng)用開發(fā)數(shù)據(jù)庫系統(tǒng)原理與設(shè)計第11章數(shù)據(jù)庫應(yīng)用開發(fā)學(xué)習(xí)目標(biāo)本章從開發(fā)者而不是管理者的角度來看待數(shù)據(jù)庫圍繞數(shù)據(jù)庫的應(yīng)用開發(fā)展開,介紹數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)的演變及其現(xiàn)狀,討論常見的數(shù)據(jù)庫訪問技術(shù),并通過一些具體的代碼介紹數(shù)據(jù)庫開發(fā)的過程本章的學(xué)習(xí)目的是:理解軟件開發(fā)體系結(jié)構(gòu)變遷的驅(qū)動力理解當(dāng)前主要的軟件開發(fā)體系結(jié)構(gòu)的思想了解一些主要的數(shù)據(jù)庫訪問技術(shù)能夠使用某種數(shù)據(jù)庫訪問技術(shù)進(jìn)行簡單的數(shù)據(jù)庫應(yīng)用開發(fā)第11章數(shù)據(jù)庫應(yīng)用開發(fā)學(xué)習(xí)方法結(jié)合應(yīng)用開發(fā)的實踐來加深對本章知識的理解在學(xué)習(xí)數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)時,可將自己使用過的應(yīng)用程序或系統(tǒng)對號入座,通過具體的應(yīng)用來理解不同體系結(jié)構(gòu)的特點在學(xué)習(xí)數(shù)據(jù)庫訪問技術(shù)時要聯(lián)系程序開發(fā)實踐來加深理解不要求掌握每種數(shù)據(jù)庫訪問技術(shù),但要求能夠使用某種主流的數(shù)據(jù)庫訪問技術(shù)來進(jìn)行數(shù)據(jù)庫應(yīng)用開發(fā)數(shù)據(jù)庫應(yīng)用開發(fā)技術(shù)在不斷更新,讀者要及時補(bǔ)充新的知識學(xué)習(xí)指南本章的重點是11.1和11.2節(jié)關(guān)于11.3節(jié),不要求一定要掌握VisualC++下ADO技術(shù),但是至少要掌握某種開發(fā)環(huán)境下的某種數(shù)據(jù)庫訪問技術(shù)第11章數(shù)據(jù)庫應(yīng)用開發(fā)本章面向應(yīng)用程序員,介紹數(shù)據(jù)庫應(yīng)用開發(fā)中的知識,重點是介紹數(shù)據(jù)庫開發(fā)的基本技術(shù)。具體的數(shù)據(jù)庫開發(fā)技術(shù)與具體的開發(fā)環(huán)境有關(guān),本書介紹VisualC++下使用ADO的開發(fā)過程。目錄數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫訪問技術(shù)11.2數(shù)據(jù)庫應(yīng)用開發(fā)實踐11.311.1數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)在20世紀(jì)90年代之前,開發(fā)人員一直通過集成本地系統(tǒng)服務(wù)來構(gòu)建應(yīng)用程序在這種模式下,開發(fā)人員通過嵌入式開發(fā)語言或自含式語言訪問后臺數(shù)據(jù)庫,可以嚴(yán)格控制應(yīng)用程序如使用嵌入式C或嵌入式COBOL語言開發(fā)訪問ORACLE數(shù)據(jù)庫的應(yīng)用程序系統(tǒng);使用FoxPro自含式語言開發(fā)訪問FoxPro數(shù)據(jù)庫的應(yīng)用程序系統(tǒng)如今,開發(fā)人員在很大程度上已經(jīng)擺脫了這種模式的束縛,致力于構(gòu)建具有N層復(fù)雜結(jié)構(gòu)的系統(tǒng)這種系統(tǒng)將分散在網(wǎng)絡(luò)中各處的眾多的應(yīng)用程序進(jìn)行集成,可以極大地提升應(yīng)用程序的價值在這種開發(fā)模式下,開發(fā)人員不必為構(gòu)建基本結(jié)構(gòu)花費過多精力有利于集中精力挖掘軟件獨特的商業(yè)價值,縮短軟件投放市場的開發(fā)周期編程效率明顯提高,軟件質(zhì)量也得到了相應(yīng)的保證11.1.1軟件開發(fā)體系結(jié)構(gòu)概述隨著軟件系統(tǒng)的規(guī)模和復(fù)雜程度的增加,軟件體系結(jié)構(gòu)的選擇比數(shù)據(jù)結(jié)構(gòu)和算法的選擇顯得更為重要軟件體系結(jié)構(gòu)是構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件處理構(gòu)件負(fù)責(zé)對數(shù)據(jù)進(jìn)行加工數(shù)據(jù)構(gòu)件是被加工的信息連接構(gòu)件把體系結(jié)構(gòu)的不同部分組合連接起來最初的軟件體系結(jié)構(gòu)是客戶表示、數(shù)據(jù)和程序集中放在主機(jī)上,只有少量的圖形用戶界面(GraphicalUserInterface,簡記為GUI)主機(jī)負(fù)責(zé)處理所有的業(yè)務(wù)客戶通過終端完成對遠(yuǎn)程數(shù)據(jù)庫的訪問該體系結(jié)構(gòu)要求主機(jī)具有很高的性能隨著PC機(jī)的廣泛應(yīng)用,該結(jié)構(gòu)逐漸在應(yīng)用中被淘汰11.1.1軟件開發(fā)體系結(jié)構(gòu)概述20世紀(jì)80年代中期出現(xiàn)了Client/Server分布式計算結(jié)構(gòu),該結(jié)構(gòu)將應(yīng)用程序的處理分別放在客戶(PC機(jī))和服務(wù)器(mainframe或Server)上客戶機(jī)發(fā)出SQL請求,該請求被數(shù)據(jù)庫服務(wù)器響應(yīng),通常由服務(wù)器上的關(guān)系型數(shù)據(jù)庫進(jìn)行處理PC機(jī)在接收到被處理的數(shù)據(jù)后實現(xiàn)顯示和業(yè)務(wù)邏輯系統(tǒng)支持模塊化開發(fā),客戶機(jī)提供GUI供客戶輸入數(shù)據(jù)和顯示服務(wù)器返回的結(jié)果信息Client/Server結(jié)構(gòu)因其靈活性得到了極其廣泛的應(yīng)用。但對大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署和擴(kuò)展性方面還存在著不足該模式在僅有少量用戶的系統(tǒng)中其工作狀態(tài)較好當(dāng)越來越多的用戶訪問數(shù)據(jù)庫中的數(shù)據(jù)時,該模式暴露出它的弊端客戶端包含業(yè)務(wù)邏輯且應(yīng)用程序必須安裝在客戶端,一旦業(yè)務(wù)邏輯發(fā)生變化必須更改所有客戶端程序,給系統(tǒng)維護(hù)帶來很大的困難11.1.1軟件開發(fā)體系結(jié)構(gòu)概述Client/Server結(jié)構(gòu)的軟件模型其特點:將用戶的界面操作、業(yè)務(wù)邏輯放在客戶端操作將數(shù)據(jù)操作放在服務(wù)器端處理這種體系結(jié)構(gòu)無法確保數(shù)據(jù)訪問的安全(從客戶程序中可以得到數(shù)據(jù)庫密碼)網(wǎng)絡(luò)資源消耗較大(因為要保持?jǐn)?shù)據(jù)庫聯(lián)接、數(shù)據(jù)頻繁在網(wǎng)絡(luò)中傳遞)服務(wù)器負(fù)擔(dān)過重(因為它要處理所有客戶機(jī)的請求)升級不夠方便(用戶的業(yè)務(wù)邏輯發(fā)生變化,必須更改所有客戶機(jī)的軟件)Internet的發(fā)展給傳統(tǒng)應(yīng)用軟件的開發(fā)帶來了深刻的影響隨著越來越多的商業(yè)系統(tǒng)搬上Internet,一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是“三層/多層計算”框架11.1.2C/S體系結(jié)構(gòu)C/S兩層結(jié)構(gòu)在技術(shù)上非常成熟,具有強(qiáng)大的數(shù)據(jù)操作和事務(wù)處理能力該結(jié)構(gòu)模型思想簡單,易于人們理解和接受主要特點是交互性強(qiáng)、具有安全的存取模式、網(wǎng)絡(luò)通信量低、響應(yīng)速度快、有利于處理大量數(shù)據(jù)隨著企業(yè)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,該結(jié)構(gòu)存在以下幾個局限:程序是針對性開發(fā),變更不夠靈活,維護(hù)和管理的難度較大。通常只局限于小型局域網(wǎng),不利于擴(kuò)展該結(jié)構(gòu)的每臺客戶機(jī)都需安裝客戶端程序,分布功能弱且兼容性差,不能實現(xiàn)快速部署安裝和配置,要求具有一定專業(yè)水準(zhǔn)的技術(shù)人員去完成。該結(jié)構(gòu)是單一服務(wù)器且以局域網(wǎng)為中心,難以擴(kuò)展至大型企業(yè)廣域網(wǎng)或Internet軟、硬件的組合及集成能力有限客戶機(jī)的負(fù)荷太重,不僅要實現(xiàn)表示層,還要實現(xiàn)業(yè)務(wù)邏輯層,一旦某個業(yè)務(wù)邏輯發(fā)生變化,則所有的客戶機(jī)軟件必須重新安裝。當(dāng)企業(yè)中有大量的客戶機(jī)時,系統(tǒng)的性能容易變壞,且維護(hù)也相當(dāng)不方便11.1.2C/S體系結(jié)構(gòu)多層體系構(gòu)架:把一個應(yīng)用程序按功能劃分成不同的邏輯組件具有特定功能的應(yīng)用程序中的一部分稱為一層典型的多層體系構(gòu)架一般把一個應(yīng)用程序分為三層表現(xiàn)層、業(yè)務(wù)邏輯層(或者中間層)和數(shù)據(jù)層中間件是在計算機(jī)硬件和操作系統(tǒng)之上,支持應(yīng)用軟件開發(fā)和運行的系統(tǒng)軟件能夠使應(yīng)用軟件相對獨立于計算機(jī)硬件和操作系統(tǒng)平臺,為大型分布式應(yīng)用搭起了一個標(biāo)準(zhǔn)的平臺把大型企業(yè)分散的系統(tǒng)和技術(shù)組合在一起,實現(xiàn)大型企業(yè)應(yīng)用軟件系統(tǒng)的集成11.1.2C/S體系結(jié)構(gòu)中間件的工作機(jī)制是:客戶端上的應(yīng)用程序從網(wǎng)絡(luò)中的某個地方獲取一定的數(shù)據(jù)或服務(wù)這些數(shù)據(jù)或服務(wù)可能處于一個運行著不同操作系統(tǒng)和特定查詢語言數(shù)據(jù)庫的服務(wù)器中應(yīng)用程序中負(fù)責(zé)尋找數(shù)據(jù)的部分只需訪問一個中間件系統(tǒng)中間件完成到網(wǎng)絡(luò)中找到數(shù)據(jù)源或服務(wù)傳輸客戶請求、重組答復(fù)信息,最后將結(jié)果送回應(yīng)用程序的任務(wù)體系結(jié)構(gòu)如圖11-2所示11.1.2C/S體系結(jié)構(gòu)在網(wǎng)絡(luò)中可以有多臺中間件服務(wù)器為提高系統(tǒng)的效率,可將企業(yè)的業(yè)務(wù)進(jìn)行大類分類同類業(yè)務(wù)規(guī)則的實現(xiàn)放在同一臺中間件服務(wù)器上保證企業(yè)的業(yè)務(wù)處理達(dá)到真正的分布式處理客戶機(jī)訪問中間件服務(wù)器是通過其提供的接口來實現(xiàn)實現(xiàn)代碼客戶看不到將企業(yè)所有的業(yè)務(wù)規(guī)則、所有對數(shù)據(jù)庫的訪問都封裝在中間件中一旦企業(yè)的某個業(yè)務(wù)規(guī)則發(fā)生變化,只要其接口保持不變,客戶機(jī)的軟件就不必更新所有對數(shù)據(jù)庫的操作也封裝在中間件中,保證了數(shù)據(jù)庫的安全數(shù)據(jù)庫服務(wù)器的功能與兩層的C/S結(jié)構(gòu)一樣,其結(jié)果數(shù)據(jù)返回給中間件服務(wù)器,不是客戶機(jī)三層是多層體系結(jié)構(gòu)的基礎(chǔ)中間件服務(wù)器可以再訪問中間件服務(wù)器,這樣就形成了多層體系結(jié)構(gòu)11.1.2C/S體系結(jié)構(gòu)多層體系構(gòu)架可將系統(tǒng)需求劃分成可以明確定義的服務(wù)如事務(wù)服務(wù)、名字服務(wù)等這些服務(wù)以組件的形式實現(xiàn)一個組件可以實現(xiàn)系統(tǒng)中的一種或者多種服務(wù),是這些服務(wù)的物理封裝根據(jù)系統(tǒng)的功能、性能等各方面的需求,系統(tǒng)管理員可以在網(wǎng)絡(luò)上靈活地部署這些組件可根據(jù)業(yè)務(wù)的改變靈活地對這些服務(wù)組件進(jìn)行修改,不影響其它組件,降低維護(hù)的費用多層體系結(jié)構(gòu)的優(yōu)點業(yè)務(wù)規(guī)則集中、瘦客戶體系結(jié)構(gòu)、自動錯誤調(diào)和、負(fù)載平衡、可重用性、靈活性、可管理性、易維護(hù)性等11.1.2C/S體系結(jié)構(gòu)開發(fā)C/S結(jié)構(gòu)應(yīng)用程序采用的主要工具有:Borland公司的Delphi7、Jbuilder2005Sybase公司的Powerbuilder10.5微軟公司的VB、VF等C/S體系結(jié)構(gòu)主要采用的編程語言有:VB、Delphi和Powerbuilder后臺數(shù)據(jù)庫有SQLServer2000、Oracle、DB2、Sybase等11.1.3B/S體系結(jié)構(gòu)三層B/S體系結(jié)構(gòu)客戶端只需安裝一個瀏覽器,客戶可在任何地方通過Internet網(wǎng)絡(luò)訪問企業(yè)中的數(shù)據(jù)所有對數(shù)據(jù)庫的訪問和應(yīng)用程序的執(zhí)行由Web服務(wù)器完成B/S體系結(jié)構(gòu)也有許多不足地方,表現(xiàn)在以下幾個方面:瀏覽器只是為了進(jìn)行Web瀏覽而設(shè)計的,當(dāng)應(yīng)用于Web應(yīng)用系統(tǒng)時,許多功能不能實現(xiàn)或?qū)崿F(xiàn)起來比較困難如通過瀏覽器進(jìn)行大量的數(shù)據(jù)輸入,或進(jìn)行報表的應(yīng)答都比較困難和不便復(fù)雜應(yīng)用的開發(fā)困難雖然可用ActiveX、Java等技術(shù)開發(fā)較為復(fù)雜的應(yīng)用,但是相對于成熟的C/S工具來說,這些技術(shù)的開發(fā)復(fù)雜11.1.3B/S體系結(jié)構(gòu)HTTP可靠性低,有可能造成應(yīng)用故障特別是對于管理者來說,采用瀏覽器方式進(jìn)行系統(tǒng)的維護(hù)非常不安全和不方便Web服務(wù)器成為數(shù)據(jù)庫服務(wù)器的唯一客戶端所有對數(shù)據(jù)庫的連接都必須通過Web服務(wù)器實現(xiàn)Web服務(wù)器同時要處理與客戶請求以及與數(shù)據(jù)庫的連接當(dāng)訪問量較大時,Web服務(wù)器的負(fù)載過重業(yè)務(wù)邏輯和數(shù)據(jù)訪問程序一般由JavaScript、VBScript等嵌入式小程序?qū)崿F(xiàn)分散在各個頁面里,難以實現(xiàn)共享,給升級和維護(hù)帶來不便由于源代碼的開放性,商業(yè)規(guī)則很容易暴露商業(yè)規(guī)則對應(yīng)用程序來說是非常重要的11.1.3B/S體系結(jié)構(gòu)由于存在上述問題,提出多層B/S體系結(jié)構(gòu)多層B/S體系結(jié)構(gòu)是在三層B/S體系結(jié)構(gòu)中增加了一個或多個中間層該層使用中間件技術(shù),由相應(yīng)的應(yīng)用服務(wù)器來管理,它是多層C/S體系結(jié)構(gòu)的一種改進(jìn)體系結(jié)構(gòu)如圖11-4所示11.1.3B/S體系結(jié)構(gòu)有很多著名企業(yè)提供了應(yīng)用服務(wù)器軟件應(yīng)用服務(wù)器可直接作為Web服務(wù)器使用作為一個安全的企業(yè)級的管理信息系統(tǒng),必須將Web服務(wù)器與應(yīng)用服務(wù)器物理分開著名的應(yīng)用服務(wù)器有:BEA公司生產(chǎn)的WeblogicApplicationServer;Borland公司生產(chǎn)的EnterpriseServerAppServerServer;Oracle公司生產(chǎn)的OracleApplicationServer;IBM公司生產(chǎn)的WebsphereApplicationServer;微軟公司生產(chǎn)的M11.1.3B/S體系結(jié)構(gòu)B/S體系結(jié)構(gòu)的主要特點是:分布性強(qiáng)、維護(hù)方便、開發(fā)簡單且共享性強(qiáng)、總體成本低對服務(wù)器要求過高、數(shù)據(jù)傳輸速度慢、軟件的個性化特點明顯降低難以實現(xiàn)傳統(tǒng)模式下的特殊功能要求如通過瀏覽器進(jìn)行大量的數(shù)據(jù)輸入或進(jìn)行報表的應(yīng)答、專用性打印輸出等的實現(xiàn)比較困難和不便實現(xiàn)復(fù)雜的應(yīng)用開發(fā)有較大的困難相對非常成熟的C/S結(jié)構(gòu)的系列應(yīng)用開發(fā)工具來說,開發(fā)比較復(fù)雜提出一種將C/S與B/S結(jié)構(gòu)相結(jié)合的開發(fā)方法11.1.4C/S與B/S結(jié)構(gòu)的結(jié)合這種結(jié)構(gòu)優(yōu)點在于:充分發(fā)揮B/S與C/S體系結(jié)構(gòu)的優(yōu)勢,彌補(bǔ)了各自的不足信息發(fā)布、數(shù)據(jù)查詢、下訂單、維修服務(wù)等采用B/S結(jié)構(gòu),保持瘦客戶端的優(yōu)點由于Web瀏覽器和網(wǎng)絡(luò)綜合服務(wù)器都是基于工業(yè)標(biāo)準(zhǔn)的,可在所有的平臺上工作企業(yè)內(nèi)部采用C/S結(jié)構(gòu),可通過ADO/JDBC連接。這一部分只涉及到系統(tǒng)維護(hù)、數(shù)據(jù)更新等,不存在完全采用C/S結(jié)構(gòu)帶來的客戶端維護(hù)工作量大等缺點在客戶端可以開發(fā)非常復(fù)雜的應(yīng)用,界面友好靈活,易于操作,能解決許多B/S存在的固有缺點11.1.4C/S與B/S結(jié)構(gòu)的結(jié)合對于原有基于C/S體系結(jié)構(gòu)的應(yīng)用,可以非常容易地升級到這種體系結(jié)構(gòu)只需開發(fā)用于發(fā)布的Web界面,保留原有的C/S結(jié)構(gòu)的某些子系統(tǒng),充分地利用現(xiàn)有系統(tǒng)的資源,使得現(xiàn)有系統(tǒng)或資源無需大的改造即可以連接使用,節(jié)省投資通過在瀏覽器中嵌入ActiveX控件實現(xiàn)復(fù)雜的功能如通過瀏覽器進(jìn)行報表的應(yīng)答客戶端ActiveX控件的加盟,可豐富HTML頁面,產(chǎn)生令人驚奇的效果將服務(wù)器端劃分為Web服務(wù)器和應(yīng)用服務(wù)器兩部分應(yīng)用服務(wù)器采用組件技術(shù)實現(xiàn)多層B/S體系結(jié)構(gòu)中的商業(yè)邏輯部分,達(dá)到封裝源代碼,保護(hù)知識產(chǎn)權(quán)的目的Internet應(yīng)用程序大部分屬于分布式應(yīng)用程序,采用組件技術(shù)的一個重要特點就是它的處理能力能夠隨著用戶數(shù)量、數(shù)據(jù)量所需性能的提高而提高11.1.5常用開發(fā)體系結(jié)構(gòu)目前常用的開發(fā)體系結(jié)構(gòu)有兩種,一種是C/S體系結(jié)構(gòu),一種是B/S體系結(jié)構(gòu)開發(fā)體系如圖11-6所示11.1.5常用開發(fā)體系結(jié)構(gòu)常用的開發(fā)方法有基于微軟公司的.NET平臺技術(shù)和基于SUN公司的Java技術(shù)Microsoft.NET是將互聯(lián)網(wǎng)本身作為構(gòu)建新一代操作系統(tǒng)的基礎(chǔ),是當(dāng)今計算機(jī)技術(shù)通向計算時代的一個非常重要的里程碑ASP.NET是Microsoft.NET的重要組成部分,是Web應(yīng)用程序開發(fā)環(huán)境。ASP.NET具有如下優(yōu)點:它構(gòu)建在CLR(CommonLanguageRuntime,通用語言運行時)之上,用它開發(fā)的程序可以支持異??刂啤㈩愋桶踩?、繼承和動態(tài)編譯;采用Code-Behind技術(shù)來實現(xiàn)Web頁面表示層和商業(yè)邏輯代碼分離,從而實現(xiàn)代碼的重用;組件部署簡單,并且組件在使用之前不必注冊;11.1.5常用開發(fā)體系結(jié)構(gòu)安全機(jī)制完善,還能自動檢測內(nèi)存泄露,自動啟動進(jìn)程;有更高的執(zhí)行效率ASP.NET代碼是采用編譯方式執(zhí)行,從而可以建立高效率的Web應(yīng)用程序由于在ASP.NET中使用ADO.NET對數(shù)據(jù)庫進(jìn)行存取。ADO.NET使用XML交換數(shù)據(jù),其執(zhí)行效率比傳統(tǒng)的COM(ComponentObjectModel)marshalling方式快得多ADO.NET在ADO的基礎(chǔ)上增加了許多對象如DataSet、DataReader、DataView和DataSetCommand等DataSet對象是核心,它以離線的方式存在于內(nèi)存中用于讀取數(shù)據(jù),讀取速度更快。11.1.5常用開發(fā)體系結(jié)構(gòu)在ASP.NET中,對數(shù)據(jù)庫訪問可以采用三種方法來實現(xiàn):利用數(shù)據(jù)庫組件通過ODBC連接來實現(xiàn);通過.NET中包含的用于訪問企業(yè)數(shù)據(jù)庫的數(shù)據(jù)提供程序SQLServer.NET來實現(xiàn);通過.NET中包含的用于訪問企業(yè)數(shù)據(jù)庫的數(shù)據(jù)提供程序OLEDB.NET來實現(xiàn)。通常選用.NET中包含的用于訪問企業(yè)數(shù)據(jù)庫的程序來實現(xiàn)數(shù)據(jù)訪問11.1.5常用開發(fā)體系結(jié)構(gòu)MVC開發(fā)模型幾乎所有現(xiàn)代網(wǎng)絡(luò)開發(fā)框架都遵循了Model-View-Controller(模型-視圖-控制)設(shè)計模式,簡稱MVC模式MVC架構(gòu)模式是20世紀(jì)80年代中期在Smalltalk-80GUI(一種經(jīng)典的面向?qū)ο蟪绦蛟O(shè)計語言)實驗室發(fā)明的MVC模式將一個軟件分為商務(wù)邏輯(Model)和顯示(View)兩部分,其好處主要有兩個方面:同一商務(wù)邏輯層(Model)可能對應(yīng)多個顯示層(View)如果商務(wù)邏輯層和顯示層放在一起,再添加一個顯示層的時候就會極大地增加組件的復(fù)雜性一個商務(wù)邏輯對著兩個顯示層的例子是:銀行帳戶的商務(wù)邏輯層對應(yīng)ATM和Internet兩個顯示層通常情況下,每次修改顯示層的時候一般并不需要修改商務(wù)邏輯層11.1.5常用開發(fā)體系結(jié)構(gòu)MVC模型的含義Model層一般利用組件進(jìn)行設(shè)計,在復(fù)雜的商務(wù)邏輯上,提供簡單并且統(tǒng)一的應(yīng)用程序接口這一層負(fù)責(zé)管理應(yīng)用程序的行為和狀態(tài),響應(yīng)狀態(tài)的請求和改變狀態(tài)的指令View層:從Model層和Controller層獲取數(shù)據(jù),并按照某種方式顯示給用戶。Controller層的功能是捕捉用戶的一些事件,并根據(jù)用戶和應(yīng)用程序的狀態(tài)來決定響應(yīng)的類型Controller層的響應(yīng)會同時影響到View層和Model層11.1.5常用開發(fā)體系結(jié)構(gòu)MVC在JSP中的設(shè)計模式使用JSP技術(shù)來實現(xiàn)客戶頁面通過Servlet技術(shù)完成大量的事務(wù)處理工作以實現(xiàn)用戶的商業(yè)邏輯Servlet用于處理請求的事務(wù)充當(dāng)控制器(Controller即“C”)的角色負(fù)責(zé)響應(yīng)客戶對業(yè)務(wù)邏輯的請求并根據(jù)用戶的請求行為,決定將哪個JSP頁面發(fā)送給客戶JSP頁面處于表現(xiàn)層,也就是視圖(View即“V”)的角色JavaBean負(fù)責(zé)數(shù)據(jù)的處理,是模型(Model即“M”)的角色圖11-7描述了基于JSP的MVC設(shè)計模式11.1.5常用開發(fā)體系結(jié)構(gòu)目前有兩種實現(xiàn)模型:基于Bean的MVC模型Bean可利用JavaBean實現(xiàn),也可利用EJB來實現(xiàn),分別構(gòu)成的系統(tǒng)是:JavaBean(M)+JSP(V)+Servlet(C);EJB(M)+JSP(V)+Servlet?實現(xiàn)。EJB屬于重量級的實體Bean,目前采用Spring+Hibernate框架構(gòu)造企業(yè)級的應(yīng)用Hibernate是一個開放源代碼的對象關(guān)系映射框架它對JDBC進(jìn)行了輕量級的對象封裝Java程序員可隨心所欲地使用對象編程思想來操縱數(shù)據(jù)庫Hibernate可以應(yīng)用在任何使用JDBC的場合既可以在Java的客戶端程序中使用也可以在Servlet/JSP的Web應(yīng)用中使用Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)的持久化11.1.5常用開發(fā)體系結(jié)構(gòu)基于Struts的MVC模型Struts是Apache組織的一個項目,像其他的Apache組織的項目一樣,它也是開放源代碼的項目Struts是一個比較好的MVC框架提供了對開發(fā)MVC系統(tǒng)的底層支持采用的主要技術(shù)是Servlet、JSP和customtaglibraryStruts是一組相互協(xié)作的類、Servlet和JSP標(biāo)記,它們組成一個可重用的MVC設(shè)計這個定義表示Struts是一個框架,而不是一個庫Struts包含了豐富的標(biāo)記庫和獨立于該框架工作的實用程序類目錄數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫訪問技術(shù)11.2數(shù)據(jù)庫應(yīng)用開發(fā)實踐11.3如何訪問數(shù)據(jù)庫中的數(shù)據(jù)DBA:通過DBMS工具來訪問如SQL
Server的企業(yè)管理器、查詢處理器最終用戶:通過客戶端工具或應(yīng)用程序的GUI來訪問如表單、報表等應(yīng)用程序員:通過API來訪問在應(yīng)用程序中訪問數(shù)據(jù)庫訪問技術(shù)數(shù)據(jù)庫訪問技術(shù):為了使不同的程序員能夠在各種應(yīng)用程序中訪問不同的數(shù)據(jù)庫一組標(biāo)準(zhǔn)化的技術(shù)數(shù)據(jù)庫應(yīng)用程序的精髓:標(biāo)準(zhǔn)化的數(shù)據(jù)庫查詢語言:SQL通用的數(shù)據(jù)庫訪問技術(shù):ODBC、ADO……ODBCAPI和ODBC庫ODBC:OpenDataBaseConnectivity,開放數(shù)據(jù)庫連接是Microsoft定義的一種數(shù)據(jù)庫訪問標(biāo)準(zhǔn),一個ODBC應(yīng)用程序可以訪問在本地數(shù)據(jù)庫上的數(shù)據(jù),也可以進(jìn)行擴(kuò)展,于訪問多種異構(gòu)平臺上的數(shù)據(jù)庫。ODBC本質(zhì)上是一組數(shù)據(jù)庫訪問的API。表面上看ODBC由一組函數(shù)組成,實質(zhì)上其核心是SQL。ODBCAPI的主要功能是將SQL語句發(fā)送到目標(biāo)數(shù)據(jù)庫中,然后對這些語句產(chǎn)生的結(jié)果進(jìn)行處理。ODBC庫是對ODBCAPI的封裝,如MFCODBC是在MicrosoftMFC中封裝了ODBCAPI的產(chǎn)物。ODBC體系結(jié)構(gòu)ODBC組件應(yīng)用程序不是直接調(diào)用ODBC驅(qū)動程序,而是先調(diào)用ODBC驅(qū)動程序管理器提供的API,而ODBC驅(qū)動程序管理器再調(diào)用相應(yīng)的ODBC驅(qū)動程序,這種間接的調(diào)用方式使得不管是連接到什么數(shù)據(jù)庫都可以按照一致的方式來調(diào)用。應(yīng)用程序通過專為DBMS編寫的ODBC驅(qū)動程序,而不是直接使用DBMS的工作方式,獨立于DBMS。驅(qū)動程序?qū)⑦@些調(diào)用轉(zhuǎn)換成DBMS可使用的命令,因而簡化了開發(fā)人員的工作,使得廣泛的數(shù)據(jù)源都可以使用它。MFCDAODAO:DataAccessObject,數(shù)據(jù)訪問對象DAO提供一組分層對象,這些對象使用MicrosoftJet數(shù)據(jù)庫引擎訪問下列對象中的數(shù)據(jù)和數(shù)據(jù)庫結(jié)構(gòu)MicrosoftJet(.MDB)數(shù)據(jù)庫ODBC數(shù)據(jù)源,使用ODBC驅(qū)動程序可安裝的ISAM數(shù)據(jù)庫(如dBASE和Paradox)與ODBC一樣,DAO提供了一組API,而MFC也提供了一組DAO類,封裝了底層的API,從而簡化了程序的開發(fā)DAO應(yīng)用程序訪問數(shù)據(jù)的原理DAO應(yīng)用程序訪問數(shù)據(jù)的原理DAO和Jet數(shù)據(jù)庫引擎一起工作。如果該數(shù)據(jù)庫是一個本地的Access數(shù)據(jù)庫或者其他ISAM類型的數(shù)據(jù)庫,那么Jet引擎加載相應(yīng)的數(shù)據(jù)庫驅(qū)動程序。如果Jet正在使用遠(yuǎn)程數(shù)據(jù)庫,那么該引擎加載ODBC驅(qū)動程序管理器,利用ODBC調(diào)用來訪問遠(yuǎn)程ODBC數(shù)據(jù)庫。ODBC的工作依賴于數(shù)據(jù)庫制造商提供的驅(qū)動程序,而DAO直接利用MicrosoftJet引擎提供的數(shù)據(jù)庫訪問對象集進(jìn)行工作,這使得DAO在訪問Access、FoxPro、dBase、Paradox、Excel等數(shù)據(jù)庫時具有更好的性能。RDORDO:RemoteDataObjects,遠(yuǎn)程數(shù)據(jù)對象作為DAO的繼承者,RDO將數(shù)據(jù)訪問對象DAO提供的易編程性和ODBCAPI提供的高性能有效地結(jié)合在一起。DAO是一種位于MicrosoftJet引擎之上的對象層,而RDO封裝了ODBCAPI的對象層。RDO沒有Jet引擎的高開銷,再加上與ODBC的緊密關(guān)系,使得它訪問ODBC兼容的數(shù)據(jù)庫(如SQLServer)時具有比DAO更高的性能。雖然RDO已被后來發(fā)展起來的ADO所取代,但是RDO與ODBC的密切關(guān)系使得RDO在某些情況下的性能比ADO更加突出。OLEDBOLEDB:ObjectLinkingandEmbedding,Database,對象鏈接嵌入數(shù)據(jù)庫是Microsoft開發(fā)的一種高性能的、基于COM的數(shù)據(jù)庫技術(shù)。OLEDB和其他Microsoft數(shù)據(jù)庫技術(shù)的不同之處在于其提供通用數(shù)據(jù)訪問的方式:其一是分布式查詢或統(tǒng)一訪問多個(分布式)數(shù)據(jù)源功能;其二是能夠使非DBMS數(shù)據(jù)源可由數(shù)據(jù)庫應(yīng)用程序訪問。OLEDB使用者和提供者使用OLEDB的應(yīng)用程序可以分為兩種:OLEDB提供者(OLEDBProvider)和OLEDB使用者(OLEDBConsumer)OLEDB提供者OLEDB使用者就是使用OLEDB接口的應(yīng)用程序。OLEDB提供者則負(fù)責(zé)訪問數(shù)據(jù)源,并通過OLEDB接口向OLEDB使用者提供數(shù)據(jù)。與ODBC類似,每一個不同的OLEDB數(shù)據(jù)源都是用自己相應(yīng)的OLEDB提供者。SQLServer2000中包含了以下OLEDB提供者:OLEDBProviderforSQLServerOLEDBProviderforODBCOLEDBProviderforJetOLEDBProviderforDTSPackagesOLEDBProviderforOracle通過OLEDB提供者訪問不同的數(shù)據(jù)源ADOADO:ActiveXDataObjects技術(shù)ADO是基于OLEDB的訪問接口,它繼承了OLEDB技術(shù)的優(yōu)點,并且對OLEDB的接口做了封裝,定義了ADO對象,簡化了程序的開發(fā)。ADO是DAO/RDO的后繼產(chǎn)物,ADO2.0在功能上與RDO更相似,區(qū)別在于:ADO是OLEDB的COM包裝,允許使用任何數(shù)據(jù)源,不只是已索引的、連續(xù)的訪問方法(ISAM)和基于SQL的數(shù)據(jù)庫RDO是ODBC的COM包裝。ODBC是一個基于C的API,允許通用用途(異類)的數(shù)據(jù)訪問。但是,RDO依賴SQL作為命令語言來訪問數(shù)據(jù)ADO.NETADO.NET是微軟在.NETFramework中負(fù)責(zé)數(shù)據(jù)訪問的類庫集,它是基于在COM時代奠基的OLEDB技術(shù)以及.NETFramework的類庫和編程語言發(fā)展而來的,它可以讓.NET上的任何編程語言能夠連接并訪問關(guān)系數(shù)據(jù)庫與非數(shù)據(jù)庫型數(shù)據(jù)來源(例如XML,Excel或是文本文檔數(shù)據(jù)),或是獨立出來作為處理應(yīng)用程序數(shù)據(jù)的類對象。在ADO.NET中,可以使用兩個組件來訪問和處理數(shù)據(jù):.NETFramework數(shù)據(jù)提供程序(.NETDataProvider)和DataSet。.NETFramework數(shù)據(jù)提供程序.NETFramework數(shù)據(jù)提供程序用于連接到數(shù)據(jù)庫、執(zhí)行命令和檢索結(jié)果。.NETFramework數(shù)據(jù)提供程序是專門為數(shù)據(jù)處理以及快速地只進(jìn)、只讀訪問數(shù)據(jù)而設(shè)計的組件:Connection對象提供與數(shù)據(jù)源的連接。Command對象使得能夠訪問用于返回數(shù)據(jù)、修改數(shù)據(jù)、運行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流。DataAdapter提供連接DataSet對象和數(shù)據(jù)源的橋梁。DataAdapter使用Command對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使得DataSet中的數(shù)據(jù)更改與數(shù)據(jù)源保持一致。ADO.NETDataSetADO.NETDataSet專門為獨立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設(shè)計。它可以用于多種不同的數(shù)據(jù)源,用于XML數(shù)據(jù),或用于管理應(yīng)用程序本地的數(shù)據(jù)。DataSet包含一個或多個DataTable對象的集合,這些對象由數(shù)據(jù)行和數(shù)據(jù)列以及有關(guān)DataTable對象中數(shù)據(jù)的主碼、外碼、約束和關(guān)系信息組成。ADO.NET結(jié)構(gòu)JDBCJDBC:Javadatabaseconnectivity,Java數(shù)據(jù)庫連接是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法JDBC與ODBC:ODBC不適合直接在Java中使用,因為它使用C語言接口JDBCAPI對于基本的SQL抽象和概念是一種自然的Java接口。它建立在ODBC上而不是從零開始JDBC以Java風(fēng)格與優(yōu)點為基礎(chǔ)并進(jìn)行優(yōu)化,因此更加易于使用Java程序連接數(shù)據(jù)庫的方法JDBC驅(qū)動程序的類型:JDBC-ODBC橋加ODBC驅(qū)動程序:利用ODBC驅(qū)動程序提供JDBC訪問本地API:這種類型的驅(qū)動通過客戶端加載數(shù)據(jù)庫廠商提供的本地代碼庫(C/C++等)來訪問數(shù)據(jù)庫JDBC網(wǎng)絡(luò)的純Java驅(qū)動程序:這種驅(qū)動程序?qū)DBC轉(zhuǎn)換為與DBMS無關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議本地協(xié)議純Java驅(qū)動程序:這種類型的驅(qū)動程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議第(3)、(4)類驅(qū)動程序?qū)⒊蔀閺腏DBC訪問數(shù)據(jù)庫的首選方法。數(shù)據(jù)庫訪問技術(shù)小結(jié)(1)ODBC:第一個使用SQL訪問不同關(guān)系數(shù)據(jù)庫的數(shù)據(jù)訪問技術(shù)DAO和RDO:ODBC使用低層接口,使用ODBC比較麻煩。
DAO是建立在MicrosoftJet基礎(chǔ)之上的,使用DAO是最快速、最有效地連接Access數(shù)據(jù)庫的方法。DAO也可以連接到非Access數(shù)據(jù)庫,但是需要Jet引擎解釋DAO和ODBC之間的調(diào)用,這導(dǎo)致了較慢的連接速度和額外的開銷RDO為ODBC提供了一個COM的封裝RDO的目的是簡化ODBC的開發(fā)和在VisualBasic和VBA程序中使用ODBC數(shù)據(jù)庫訪問技術(shù)小結(jié)(2)OLEDB:OLEDB建立于ODBC之上,并將此技術(shù)擴(kuò)展為提供更高級數(shù)據(jù)訪問接口的組件結(jié)構(gòu)OLEDB是一個針對SQL數(shù)據(jù)源和非SQL數(shù)據(jù)源(例如郵件和目錄)進(jìn)行操作的APIADO類似于ODBC,OLEDB也是屬于低層接口,這為OLEDB的使用帶來了障礙ADO是OLEDB的COM包裝ADO主要為連接的數(shù)據(jù)訪問而設(shè)計,這意味著不論是瀏覽或更新數(shù)據(jù)都必須是實時的,這種連接的訪問模式占用服務(wù)器端的重要資源數(shù)據(jù)庫訪問技術(shù)小結(jié)(3)ADO.NET:ADO.NET滿足了ADO無法滿足的三個重要需求:提供了離線的數(shù)據(jù)訪問模型,這對Web環(huán)境至關(guān)重要;提供了與XML的緊密集成;還提供了與.NETFramework的無縫集成JDBC:JDBC是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問接口JDO:提供了透明的對象存儲,存儲數(shù)據(jù)對象完全不需要額外的代碼(如JDBCAPI的使用)JDO提供到任何數(shù)據(jù)底層的存儲功能,比如關(guān)系數(shù)據(jù)庫、文件、XML及對象數(shù)據(jù)庫等,使得應(yīng)用可移植性更強(qiáng)數(shù)據(jù)庫訪問技術(shù)小結(jié)(4)數(shù)據(jù)訪問技術(shù)的發(fā)展呈現(xiàn)出以下態(tài)勢:高級化:即對象模型越來越簡單,調(diào)用越來越容易,調(diào)用方法一般與底層無關(guān);通用化:即能夠以一種統(tǒng)一的方式訪問各種異構(gòu)數(shù)據(jù)源,如關(guān)系數(shù)據(jù)庫、XML數(shù)據(jù)、文本等;高效化:得益于各種優(yōu)化技術(shù),現(xiàn)在的數(shù)據(jù)訪問技術(shù)能夠針對各種數(shù)據(jù)源采用最合適的訪問技術(shù)。同時,離線的數(shù)據(jù)訪問模式大大降低了與服務(wù)器的交互,也減輕了服務(wù)器的負(fù)擔(dān),提高了整體性能。數(shù)據(jù)庫訪問技術(shù)的選擇:在.NET環(huán)境下開發(fā)應(yīng)用應(yīng)該首選ADO.NET在Windows平臺非.NET環(huán)境下開發(fā)應(yīng)用一般都可以使用ADO目錄數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫訪問技術(shù)11.2數(shù)據(jù)庫應(yīng)用開發(fā)實踐11.3ADO編程對象模型ADO提供類和對象以完成以下活動:
連接到數(shù)據(jù)源(Connection),并可選擇開始一個事務(wù);可選擇創(chuàng)建對象來表示SQL命令(Command);可選擇在SQL命令中指定列、表和值作為變量參數(shù)(Parameter);執(zhí)行命令(Command、Connection或Recordset);如果命令按行返回,則將行存儲在緩存中(Recordset);可選擇創(chuàng)建緩存視圖,以便能對數(shù)據(jù)進(jìn)行排序、篩選和定位(Recordset);通過添加、刪除或更改行和列編輯數(shù)據(jù)(Recordset);在適當(dāng)情況下,使用緩存中的更改內(nèi)容來更新數(shù)據(jù)源(Recordset);如果使用了事務(wù),則可以接受或拒絕在完成事務(wù)期間所作的更改并結(jié)束事務(wù)(Connection)ADO對象模型中的對象及其說明對象說明Connection代表打開的、與數(shù)據(jù)源的連接CommandCommand對象定義了將對數(shù)據(jù)源執(zhí)行的指定命令Parameter代表與基于參數(shù)化查詢或存儲過程的Command對象相關(guān)聯(lián)的參數(shù)或自變量Recordset代表來自基本表或命令執(zhí)行結(jié)果的記錄的集合。任何時候,Recordset
對象所指的當(dāng)前記錄均為集合內(nèi)的單個記錄Field代表使用普通數(shù)據(jù)類型的數(shù)據(jù)的列Error包含與單個操作(涉及提供者)有關(guān)的數(shù)據(jù)訪問錯誤的詳細(xì)信息Property代表由提供者定義的ADO對象的動態(tài)特性ADO數(shù)據(jù)集合及其說明
集合說明Errors包含為響應(yīng)涉及提供者的單個錯誤而創(chuàng)建的所有Error對象。Fields包含Recordset對象的所有Field對象。Parameters包含Command對象的所有Parameter對象。Properties包含指定對象實例的所有Property對象。ADO對象和數(shù)據(jù)集合之間的關(guān)系Connection對象Connection對象代表打開的、與數(shù)據(jù)源的連接用Connection對象的可執(zhí)行下列操作:
在打開連接前使用ConnectionString、ConnectionTimeout和Mode屬性對連接進(jìn)行配置設(shè)置CursorLocation屬性以便調(diào)用支持批更新的“客戶端游標(biāo)提供者”使用DefaultDatabase屬性設(shè)置連接的默認(rèn)數(shù)據(jù)庫使用IsolationLevel屬性為在連接上打開的事務(wù)設(shè)置隔離級別使用Provider屬性指定OLEDB提供者使用Open方法建立到數(shù)據(jù)源的物理連接,使用Close方法將其斷開使用Execute方法執(zhí)行連接的命令,并使用CommandTimeout屬性對執(zhí)行進(jìn)行配置使用BeginTrans、CommitTrans和RollbackTrans方法以及Attributes屬性管理打開的連接上的事務(wù)(如果提供者支持則包括嵌套的事務(wù))使用Errors集合檢查數(shù)據(jù)源返回的錯誤通過Version屬性讀取使用中的ADO執(zhí)行版本使用OpenSchema方法獲取數(shù)據(jù)庫模式信息Command對象Command對象定義了將對數(shù)據(jù)源執(zhí)行的指定命令使用Command對象可進(jìn)行下列操作:使用CommandText屬性定義命令(如SQL語句)的可執(zhí)行文本通過Parameter對象和Parameters集合定義參數(shù)化查詢或存儲過程參數(shù)使用Execute方法執(zhí)行命令并在適當(dāng)?shù)臅r候返回Recordset對象執(zhí)行前應(yīng)使用CommandType屬性指定命令類型以優(yōu)化性能使用Prepared屬性決定提供者是否在執(zhí)行前保存準(zhǔn)備好(或編譯好)的命令版本使用CommandTimeout屬性設(shè)置提供者等待命令執(zhí)行的秒數(shù)通過設(shè)置ActiveConnection屬性使打開的連接與Command對象關(guān)聯(lián)設(shè)置Name屬性將Command標(biāo)識為與Connection對象關(guān)聯(lián)的方法將Command對象傳送給Recordset的Source屬性以便獲取數(shù)據(jù)Parameter對象Parameter對象代表與基于參數(shù)化查詢或存儲過程的Command對象相關(guān)聯(lián)的參數(shù)或自變量使用Parameter對象可進(jìn)行如下操作:使用Name屬性可設(shè)置或返回參數(shù)名稱;使用Value屬性可設(shè)置或返回參數(shù)值;使用Attributes和Direction、Precision、NumericScale、Size以及Type屬性可設(shè)置或返回參數(shù)特性;使用AppendChunk方法可將長整型二進(jìn)制或字符數(shù)據(jù)傳遞給參數(shù)Recordset對象Recordset對象表示來自基本表或命令執(zhí)行結(jié)果的記錄集合。任何時候,Recordset對象所指的當(dāng)前記錄均為集合內(nèi)的單個記錄。使用ADO時,通過Recordset對象可對幾乎所有數(shù)據(jù)進(jìn)行操作。所有Recordset對象均使用記錄(行)和字段(列)進(jìn)行構(gòu)造??梢詣?chuàng)建所需數(shù)量的Recordset對象。打開Recordset時,當(dāng)前記錄位于第一個記錄(如果有),并且BOF和EOF屬性被設(shè)置為False。如果沒有記錄,BOF和EOF屬性設(shè)置是True。Recordset對象可以使用MoveFirst、MoveLast、MoveNext、MovePrevious和Move方法,以及AbsolutePosition、AbsolutePage和Filter屬性來重新確定當(dāng)前記錄的位置Recordset對象可支持兩類更新:使用立即更新,一旦調(diào)用Update方法,對數(shù)據(jù)的所有更改將被立即寫入基本數(shù)據(jù)源。也可以使用AddNew和Update方法將值的數(shù)組作為參數(shù)傳遞,同時更新記錄的若干字段。如果提供者支持批更新,可以使提供者將多個記錄的更改存入緩存,然后使用UpdateBatch方法在單個調(diào)用中將它們傳送給數(shù)據(jù)庫。Field對象Field對象代表使用普通數(shù)據(jù)類型的數(shù)據(jù)的列使用Field對象可進(jìn)行如下操作:使用Name屬性可返回字段名;使用Value屬性可查看或更改字段中的數(shù)據(jù);使用Type、Precision和NumericScale屬性可返回字段的基本特性;使用DefinedSize屬性可返回已聲明的字段大??;使用ActualSize屬性可返回給定字段中數(shù)據(jù)的實際大小;使用Attributes屬性和Properties集合可決定對于給定字段哪些類型的功能受到支持;使用AppendChunk和GetChunk方法可處理包含長二進(jìn)制或長字符數(shù)據(jù)的字段值;如果提供者支持批更新,可使用OriginalValue和UnderlyingValue屬性在批更新期間解決字段值之間的差異。Error對象Error對象包含與單個操作有關(guān)的數(shù)據(jù)訪問錯誤的詳細(xì)信通過Error對象可獲得每個錯誤的詳細(xì)信息,包括:Description屬性,包含錯誤的文本;Number屬性,包含錯誤常量的長整型整數(shù)值;Source屬性,標(biāo)識產(chǎn)生錯誤的對象。在向數(shù)據(jù)源發(fā)出請求之后,如果Errors集合中有多個Error對象,則將會用到該屬性;SQLState和NativeError屬性,提供來自SQL數(shù)據(jù)源的信息。Property對象Property對象代表由提供者定義的ADO對象的動態(tài)特征。ADO對象有兩種類型的屬性:內(nèi)置屬性和動態(tài)屬性內(nèi)置屬性是在ADO中實現(xiàn)并立即可用于任何新對象的屬性,此時使用MyObject.Property語法。它們不會作為Property對象出現(xiàn)在對象的Properties集合中,因此,雖然可以更改它們的值,但無法更改它們的特性動態(tài)屬性由基本的數(shù)據(jù)提供者定義,并出現(xiàn)在相應(yīng)的ADO對象的Properties集合中基于VC的數(shù)據(jù)庫應(yīng)用開發(fā)在VisualC++中使用ADO有3種不同的方法:直接使用ADOData控件;使用智能指針操作;使用VisualC++ExtensionsforADO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院科研過程管理制度
- 公司門禁密碼管理制度
- 大漢集團(tuán)薪酬管理制度
- 單位涉案財物管理制度
- 小區(qū)綠化水泵管理制度
- 員工設(shè)備工具管理制度
- 壓鑄行業(yè)安全管理制度
- 計算機(jī)三級考試新思潮試題及答案
- 嵌入式軟件測試方法試題及答案
- 北師大版四年級下冊簡便計算題200道及答案
- 2024風(fēng)電機(jī)組升降機(jī)維護(hù)定檢標(biāo)準(zhǔn)
- 重慶市市(2024年-2025年小學(xué)四年級語文)統(tǒng)編版能力評測((上下)學(xué)期)試卷及答案
- 江蘇省南通市四校聯(lián)盟2025屆高考全國統(tǒng)考預(yù)測密卷物理試卷含解析
- 2024年鐵路線路工(技師)技能鑒定理論考試題庫(含答案)
- 沈陽汽車城開發(fā)建設(shè)集團(tuán)有限公司招聘筆試題庫2024
- 腫瘤病人發(fā)熱護(hù)理
- 花箱種植合同
- 2024年全國軟件水平考試之中級網(wǎng)絡(luò)工程師考試歷年考試題(詳細(xì)參考解析)
- 【許林芳老師】-《企業(yè)文化構(gòu)建與落地》
- CJT 244-2016 游泳池水質(zhì)標(biāo)準(zhǔn)
評論
0/150
提交評論