導(dǎo)讀:
在本書前7章中,已經(jīng)講述了ASP的有關(guān)內(nèi)容,以及ASP如何為Web站點帶來動態(tài)的內(nèi)容。已經(jīng)見到其腳本程序允許自定義Web頁面,使我們能夠構(gòu)建功能更為強(qiáng)大的ASP頁面。
現(xiàn)在,將研究ASP和數(shù)據(jù)的集成。雖然對用于網(wǎng)頁中的腳本數(shù)量并無任何限制,但如果沒有某種形式的數(shù)據(jù),很快就會進(jìn)入一個死胡同。數(shù)據(jù)構(gòu)成了Web站點的實際內(nèi)容,或者指出了如何設(shè)置Web站點,因此總的說來數(shù)據(jù)是非常重要的。如果圍繞數(shù)據(jù)存儲建立Web站點,改變Web站點時只需要改變相應(yīng)的數(shù)據(jù)即可。
ActiveX數(shù)據(jù)對象(ADO)是允許用戶與數(shù)據(jù)存儲進(jìn)行交互的組件。這意味著只要基于某些數(shù)據(jù)就可建立一個網(wǎng)頁,或一種完全交互的電子商務(wù)系統(tǒng)。不論哪種方式,都是ADO使我們能與數(shù)據(jù)進(jìn)行通信。我們將討論從數(shù)據(jù)存儲獲取和傳送數(shù)據(jù)的主要內(nèi)容,以及得到數(shù)據(jù)后的數(shù)據(jù)處理方法。
首先研究什么是ADO及其所包括的組件,然后討論如何訪問數(shù)據(jù)存儲。在下一章,將進(jìn)一步學(xué)習(xí)ADO更先進(jìn)的一些特性,如命令、存儲過程和優(yōu)化應(yīng)用程序的一些操作技巧。下一步研究Web服務(wù)器和瀏覽器之間的交互過程,以及數(shù)據(jù)處理過程。然后研究數(shù)據(jù)存取領(lǐng)域中極具潛力的XML。XML是什么?如何使用?因為XML代表著未來發(fā)展的一種趨勢,我們將介紹微軟關(guān)于通用數(shù)據(jù)存取的構(gòu)想。在這個構(gòu)想中,數(shù)據(jù)不只是從數(shù)據(jù)庫中獲得的。最后,看一下標(biāo)準(zhǔn)的微軟數(shù)據(jù)庫(如Access與SQL Server)以及在其中如何使用ADO。
本章從ADO開始,主要內(nèi)容有:
研究ADO如何與數(shù)據(jù)進(jìn)行交互。
了解ADO的組件。
如何與數(shù)據(jù)存儲連接和創(chuàng)建數(shù)據(jù)集。
如何處理和修改數(shù)據(jù)。
如何處理ADO錯誤。
8.1 ADO的定義
ADO是一個相當(dāng)簡單的思想,一種讓你僅用一種方式去訪問數(shù)據(jù)的思想。ADO不算一個新思想,僅是采用現(xiàn)有的數(shù)據(jù)庫訪問技術(shù),并將其融合而形成的一種適應(yīng)現(xiàn)在和未來需要的新東西。適應(yīng)未來的需求是一件十分重要的事。許多其他的技術(shù),比如DAO和ODBC,在一些應(yīng)用程序的開發(fā)過程中是可以接受的,然而隨著Internet的興起也出現(xiàn)了其自身的一些問題。
在許多情況下,傳統(tǒng)的數(shù)據(jù)存取方法看上去能解決一些關(guān)于兩層客戶/服務(wù)器系統(tǒng)的問題,但要求與數(shù)據(jù)之間要保持一種永久性的連接,并要提供強(qiáng)大的功能,比如快速響應(yīng)的查詢、數(shù)據(jù)容易修改等。在Internet領(lǐng)域,現(xiàn)在必須考慮到Web無狀態(tài)性本質(zhì),和潛在的眾多可以訪問Web站點的用戶。要與數(shù)據(jù)建立永久的連接是不現(xiàn)實的,因此必須在設(shè)計應(yīng)用程序時考慮這些因素。
那么,OLD DB和ADO確切地講到底是什么?讓我們與一些已有的數(shù)據(jù)存取技術(shù)做比較后再來回答這個問題。如果讀者曾經(jīng)接觸過數(shù)據(jù)庫編程,或許比較熟悉ODBC和RDO。開放數(shù)據(jù)庫連接(ODBC)是允許訪問關(guān)系數(shù)據(jù)庫(比如Access和SQL Server)的應(yīng)用程序編程接口(API)。正因為是一個API,許多程序員,特別是Visual Basic領(lǐng)域的程序員,發(fā)現(xiàn)它使用起來很復(fù)雜。遠(yuǎn)程數(shù)據(jù)對象(RDO)是位于ODBC上層的ActiveX對象,可以提供ODBC的所有功能,并且使用起來比較簡單。
可以將OLE DB等同于ODBC,ADO等同于RDO。
OLE DB是應(yīng)用程序與數(shù)據(jù)源交互的一種基本技術(shù)。
這相當(dāng)復(fù)雜,確實也只有C和C++程序員能夠使用。正如ADO的名字所暗示的,它是易于訪問OLE DB功能的ActiveX對象。
你或許發(fā)現(xiàn)術(shù)語ActiveX與COM對象經(jīng)常混用。對于ASP程序員來說它們并沒有本質(zhì)上的區(qū)別,因為兩者都基于COM系統(tǒng)結(jié)構(gòu),只不過ActiveX是組件的一個跨平臺標(biāo)準(zhǔn),而COM是Windows專有的。
雖然微軟已經(jīng)引入了一種新的存取數(shù)據(jù)的技術(shù),但并沒有立即取消舊的技術(shù),ODBC工作起來仍然很有效,并同OLE DB和ADO緊密地一起工作著。事實上,ODBC并不只是微軟的產(chǎn)品,也受到國際組件的控制。并且由于廣泛的使用,ODBC也不會突然消亡。隱藏在OLE DB背后的思想不是摒棄現(xiàn)有的技術(shù),而是不斷地改進(jìn)它們。
8.1.1 OLE DB和ADO的體系結(jié)構(gòu)
前面已經(jīng)給出了OLE DB與ADO在一些主要方面的簡要解釋。圖8-1顯示了這兩項技術(shù)與應(yīng)用程序和數(shù)據(jù)存儲相互關(guān)系:
從圖8-1中可以看出整體思路。圖的頂端是應(yīng)用程序(Web或常規(guī)的應(yīng)用程序,這是無關(guān)緊要的),下面是提供對數(shù)據(jù)的訪問的ADO和/或OLE DB。ADO和OLE DB兩者兼有是因為OLE DB是一項基本技術(shù)。然而,OLE DB并不適用于所有語言,所以ADO位于OLE DB的上層,為那些不能直接訪問OLE DB的語言(如Visual Basic和腳本語言)提供編程接口。ADO提供了比OLE DB更容易的編程接口,因此即使那些可以直接使用OLE DB的編程語言,如C++或Java,也可使用ADO以簡化對數(shù)據(jù)的訪問。
圖8-1顯示的是微軟的編程語言,而ADO是一個COM組件,因此可用于任何與COM兼容的編程語言,比如Delphi或支持Active Scripting接口的腳本語言。所以,雖然ADO與平臺有關(guān),但與開發(fā)的語言是無關(guān)的。當(dāng)然,對于ASP主要使用VBScript和JScript,在組件中使用ADO時,有一些Visual Basic代碼。
現(xiàn)在知道了OLE DB和ADO允許訪問數(shù)據(jù),可是為什么需要它們?老方法出問題了嗎?這里有兩個主要原因:
首先,OLE DB和ADO是用來訪問數(shù)據(jù)存儲的。注意這里指“數(shù)據(jù)存儲”而不是“數(shù)據(jù)庫”。盡管數(shù)據(jù)庫仍舊是數(shù)據(jù)存儲最為廣泛的形式,但并不一定含有全部的數(shù)據(jù)。一些消息系統(tǒng),如Microsoft Exchange Server,也普遍地用于存儲數(shù)據(jù)。目錄服務(wù)(Directory Service)正開始在初露端倪,它們包含著有關(guān)用戶、機(jī)器等的數(shù)據(jù);Web服務(wù)器中存有大量的信息。可以繼續(xù)羅列下去,很明顯需要一種能訪問所有這些不同類型數(shù)據(jù)的方法。
其次,源于Internet應(yīng)用程序的興起與Web的狀態(tài)本質(zhì)。過去的訪問數(shù)據(jù)的方法主要考慮與數(shù)據(jù)存儲保持永久連接的情況下處理數(shù)據(jù)。而OLE DB和ADO正是為解決這個問題而設(shè)計的,提供斷開連接的記錄集,我們將會在后面看到有關(guān)這方面的內(nèi)容。
8.1.2 消費者與提供者
ADO系統(tǒng)結(jié)構(gòu)圖展示了ADO是如何在應(yīng)用程序和真實數(shù)據(jù)存儲之間發(fā)揮作用的。在微軟的文獻(xiàn)中,會看到兩個易懂的術(shù)語:消費者(Consumer)和提供者(Provider),但搞清它們的確切定義至關(guān)重要。
提供者是提供數(shù)據(jù)的物體,消費者是使用(消耗)這些數(shù)據(jù)的物體。
在編程中,經(jīng)常會發(fā)現(xiàn)應(yīng)用程序是數(shù)據(jù)的消費者。但提供者呢?一般是數(shù)據(jù)存儲,并且由于OLE DB被設(shè)計成用于與不同的數(shù)據(jù)存儲對話,因此對于每一個獨特類型的數(shù)據(jù)存儲都有一個OLE DB提供者。
這種單獨提供者的思想并不新,但使編程變得容易了。編寫程序與ADO或OLE DB對話,OLE DB再與提供者對話。這意味著只需學(xué)會一套訪問數(shù)據(jù)的方法,無論數(shù)據(jù)如何存儲,在某些情況下確實可以完全不改變?nèi)魏未a而只更換提供者。這就是ADO和OLE DB真正優(yōu)越的地方,為數(shù)據(jù)存儲提供了一套常用的編程接口。
要連接到數(shù)據(jù)存儲,必須使用OLE DB提供者。提供給ADO 2.5的初始設(shè)置為:
Jet OLE DB 4.0:用于微軟Access數(shù)據(jù)庫。
DTS Packages:用于SQL Server的數(shù)據(jù)轉(zhuǎn)換服務(wù)(Data Transformation Services)。
Internet Publishing:用于訪問Web服務(wù)器。
Indexing Services:用于索引目錄(Index Catalogs)。
Site Server Search:用于站點服務(wù)器查找目錄。
ODBC Drivers:用于ODBC數(shù)據(jù)源。
OLAP Services:用于微軟OLAP服務(wù)器。
Oracle:用于Oracle數(shù)據(jù)庫。
SQL Server:用于微軟SQL Server數(shù)據(jù)庫。
Simple Provider:用于簡單的文本文件。
MSDataShape:用于層次數(shù)據(jù)。
Microsoft Directory Services:用于Windows 2000的目錄服務(wù)。
DTS Flat File:用于SQL Server的數(shù)據(jù)轉(zhuǎn)換服務(wù)的平面文件管理。
這只是微軟提供的初始列表,并取決于安裝在服務(wù)器上的服務(wù)及軟件。以O(shè)racle數(shù)據(jù)提供者為例,要求在客戶機(jī)上安裝Oracle的客戶端軟件。
可以從別的制造商那里獲得OLE DB提供者,用于其他數(shù)據(jù)存儲。甚至還可以編寫自己的提供者。在第11章,將演示如何
本文轉(zhuǎn)自
http://study.qqcf.com/web/241/26761.htm
在本書前7章中,已經(jīng)講述了ASP的有關(guān)內(nèi)容,以及ASP如何為Web站點帶來動態(tài)的內(nèi)容。已經(jīng)見到其腳本程序允許自定義Web頁面,使我們能夠構(gòu)建功能更為強(qiáng)大的ASP頁面。
現(xiàn)在,將研究ASP和數(shù)據(jù)的集成。雖然對用于網(wǎng)頁中的腳本數(shù)量并無任何限制,但如果沒有某種形式的數(shù)據(jù),很快就會進(jìn)入一個死胡同。數(shù)據(jù)構(gòu)成了Web站點的實際內(nèi)容,或者指出了如何設(shè)置Web站點,因此總的說來數(shù)據(jù)是非常重要的。如果圍繞數(shù)據(jù)存儲建立Web站點,改變Web站點時只需要改變相應(yīng)的數(shù)據(jù)即可。
ActiveX數(shù)據(jù)對象(ADO)是允許用戶與數(shù)據(jù)存儲進(jìn)行交互的組件。這意味著只要基于某些數(shù)據(jù)就可建立一個網(wǎng)頁,或一種完全交互的電子商務(wù)系統(tǒng)。不論哪種方式,都是ADO使我們能與數(shù)據(jù)進(jìn)行通信。我們將討論從數(shù)據(jù)存儲獲取和傳送數(shù)據(jù)的主要內(nèi)容,以及得到數(shù)據(jù)后的數(shù)據(jù)處理方法。
首先研究什么是ADO及其所包括的組件,然后討論如何訪問數(shù)據(jù)存儲。在下一章,將進(jìn)一步學(xué)習(xí)ADO更先進(jìn)的一些特性,如命令、存儲過程和優(yōu)化應(yīng)用程序的一些操作技巧。下一步研究Web服務(wù)器和瀏覽器之間的交互過程,以及數(shù)據(jù)處理過程。然后研究數(shù)據(jù)存取領(lǐng)域中極具潛力的XML。XML是什么?如何使用?因為XML代表著未來發(fā)展的一種趨勢,我們將介紹微軟關(guān)于通用數(shù)據(jù)存取的構(gòu)想。在這個構(gòu)想中,數(shù)據(jù)不只是從數(shù)據(jù)庫中獲得的。最后,看一下標(biāo)準(zhǔn)的微軟數(shù)據(jù)庫(如Access與SQL Server)以及在其中如何使用ADO。
本章從ADO開始,主要內(nèi)容有:
研究ADO如何與數(shù)據(jù)進(jìn)行交互。
了解ADO的組件。
如何與數(shù)據(jù)存儲連接和創(chuàng)建數(shù)據(jù)集。
如何處理和修改數(shù)據(jù)。
如何處理ADO錯誤。
8.1 ADO的定義
ADO是一個相當(dāng)簡單的思想,一種讓你僅用一種方式去訪問數(shù)據(jù)的思想。ADO不算一個新思想,僅是采用現(xiàn)有的數(shù)據(jù)庫訪問技術(shù),并將其融合而形成的一種適應(yīng)現(xiàn)在和未來需要的新東西。適應(yīng)未來的需求是一件十分重要的事。許多其他的技術(shù),比如DAO和ODBC,在一些應(yīng)用程序的開發(fā)過程中是可以接受的,然而隨著Internet的興起也出現(xiàn)了其自身的一些問題。
在許多情況下,傳統(tǒng)的數(shù)據(jù)存取方法看上去能解決一些關(guān)于兩層客戶/服務(wù)器系統(tǒng)的問題,但要求與數(shù)據(jù)之間要保持一種永久性的連接,并要提供強(qiáng)大的功能,比如快速響應(yīng)的查詢、數(shù)據(jù)容易修改等。在Internet領(lǐng)域,現(xiàn)在必須考慮到Web無狀態(tài)性本質(zhì),和潛在的眾多可以訪問Web站點的用戶。要與數(shù)據(jù)建立永久的連接是不現(xiàn)實的,因此必須在設(shè)計應(yīng)用程序時考慮這些因素。
那么,OLD DB和ADO確切地講到底是什么?讓我們與一些已有的數(shù)據(jù)存取技術(shù)做比較后再來回答這個問題。如果讀者曾經(jīng)接觸過數(shù)據(jù)庫編程,或許比較熟悉ODBC和RDO。開放數(shù)據(jù)庫連接(ODBC)是允許訪問關(guān)系數(shù)據(jù)庫(比如Access和SQL Server)的應(yīng)用程序編程接口(API)。正因為是一個API,許多程序員,特別是Visual Basic領(lǐng)域的程序員,發(fā)現(xiàn)它使用起來很復(fù)雜。遠(yuǎn)程數(shù)據(jù)對象(RDO)是位于ODBC上層的ActiveX對象,可以提供ODBC的所有功能,并且使用起來比較簡單。
可以將OLE DB等同于ODBC,ADO等同于RDO。
OLE DB是應(yīng)用程序與數(shù)據(jù)源交互的一種基本技術(shù)。
這相當(dāng)復(fù)雜,確實也只有C和C++程序員能夠使用。正如ADO的名字所暗示的,它是易于訪問OLE DB功能的ActiveX對象。
你或許發(fā)現(xiàn)術(shù)語ActiveX與COM對象經(jīng)常混用。對于ASP程序員來說它們并沒有本質(zhì)上的區(qū)別,因為兩者都基于COM系統(tǒng)結(jié)構(gòu),只不過ActiveX是組件的一個跨平臺標(biāo)準(zhǔn),而COM是Windows專有的。
雖然微軟已經(jīng)引入了一種新的存取數(shù)據(jù)的技術(shù),但并沒有立即取消舊的技術(shù),ODBC工作起來仍然很有效,并同OLE DB和ADO緊密地一起工作著。事實上,ODBC并不只是微軟的產(chǎn)品,也受到國際組件的控制。并且由于廣泛的使用,ODBC也不會突然消亡。隱藏在OLE DB背后的思想不是摒棄現(xiàn)有的技術(shù),而是不斷地改進(jìn)它們。
8.1.1 OLE DB和ADO的體系結(jié)構(gòu)
前面已經(jīng)給出了OLE DB與ADO在一些主要方面的簡要解釋。圖8-1顯示了這兩項技術(shù)與應(yīng)用程序和數(shù)據(jù)存儲相互關(guān)系:
從圖8-1中可以看出整體思路。圖的頂端是應(yīng)用程序(Web或常規(guī)的應(yīng)用程序,這是無關(guān)緊要的),下面是提供對數(shù)據(jù)的訪問的ADO和/或OLE DB。ADO和OLE DB兩者兼有是因為OLE DB是一項基本技術(shù)。然而,OLE DB并不適用于所有語言,所以ADO位于OLE DB的上層,為那些不能直接訪問OLE DB的語言(如Visual Basic和腳本語言)提供編程接口。ADO提供了比OLE DB更容易的編程接口,因此即使那些可以直接使用OLE DB的編程語言,如C++或Java,也可使用ADO以簡化對數(shù)據(jù)的訪問。
圖8-1顯示的是微軟的編程語言,而ADO是一個COM組件,因此可用于任何與COM兼容的編程語言,比如Delphi或支持Active Scripting接口的腳本語言。所以,雖然ADO與平臺有關(guān),但與開發(fā)的語言是無關(guān)的。當(dāng)然,對于ASP主要使用VBScript和JScript,在組件中使用ADO時,有一些Visual Basic代碼。
現(xiàn)在知道了OLE DB和ADO允許訪問數(shù)據(jù),可是為什么需要它們?老方法出問題了嗎?這里有兩個主要原因:
首先,OLE DB和ADO是用來訪問數(shù)據(jù)存儲的。注意這里指“數(shù)據(jù)存儲”而不是“數(shù)據(jù)庫”。盡管數(shù)據(jù)庫仍舊是數(shù)據(jù)存儲最為廣泛的形式,但并不一定含有全部的數(shù)據(jù)。一些消息系統(tǒng),如Microsoft Exchange Server,也普遍地用于存儲數(shù)據(jù)。目錄服務(wù)(Directory Service)正開始在初露端倪,它們包含著有關(guān)用戶、機(jī)器等的數(shù)據(jù);Web服務(wù)器中存有大量的信息。可以繼續(xù)羅列下去,很明顯需要一種能訪問所有這些不同類型數(shù)據(jù)的方法。
其次,源于Internet應(yīng)用程序的興起與Web的狀態(tài)本質(zhì)。過去的訪問數(shù)據(jù)的方法主要考慮與數(shù)據(jù)存儲保持永久連接的情況下處理數(shù)據(jù)。而OLE DB和ADO正是為解決這個問題而設(shè)計的,提供斷開連接的記錄集,我們將會在后面看到有關(guān)這方面的內(nèi)容。
8.1.2 消費者與提供者
ADO系統(tǒng)結(jié)構(gòu)圖展示了ADO是如何在應(yīng)用程序和真實數(shù)據(jù)存儲之間發(fā)揮作用的。在微軟的文獻(xiàn)中,會看到兩個易懂的術(shù)語:消費者(Consumer)和提供者(Provider),但搞清它們的確切定義至關(guān)重要。
提供者是提供數(shù)據(jù)的物體,消費者是使用(消耗)這些數(shù)據(jù)的物體。
在編程中,經(jīng)常會發(fā)現(xiàn)應(yīng)用程序是數(shù)據(jù)的消費者。但提供者呢?一般是數(shù)據(jù)存儲,并且由于OLE DB被設(shè)計成用于與不同的數(shù)據(jù)存儲對話,因此對于每一個獨特類型的數(shù)據(jù)存儲都有一個OLE DB提供者。
這種單獨提供者的思想并不新,但使編程變得容易了。編寫程序與ADO或OLE DB對話,OLE DB再與提供者對話。這意味著只需學(xué)會一套訪問數(shù)據(jù)的方法,無論數(shù)據(jù)如何存儲,在某些情況下確實可以完全不改變?nèi)魏未a而只更換提供者。這就是ADO和OLE DB真正優(yōu)越的地方,為數(shù)據(jù)存儲提供了一套常用的編程接口。
要連接到數(shù)據(jù)存儲,必須使用OLE DB提供者。提供給ADO 2.5的初始設(shè)置為:
Jet OLE DB 4.0:用于微軟Access數(shù)據(jù)庫。
DTS Packages:用于SQL Server的數(shù)據(jù)轉(zhuǎn)換服務(wù)(Data Transformation Services)。
Internet Publishing:用于訪問Web服務(wù)器。
Indexing Services:用于索引目錄(Index Catalogs)。
Site Server Search:用于站點服務(wù)器查找目錄。
ODBC Drivers:用于ODBC數(shù)據(jù)源。
OLAP Services:用于微軟OLAP服務(wù)器。
Oracle:用于Oracle數(shù)據(jù)庫。
SQL Server:用于微軟SQL Server數(shù)據(jù)庫。
Simple Provider:用于簡單的文本文件。
MSDataShape:用于層次數(shù)據(jù)。
Microsoft Directory Services:用于Windows 2000的目錄服務(wù)。
DTS Flat File:用于SQL Server的數(shù)據(jù)轉(zhuǎn)換服務(wù)的平面文件管理。
這只是微軟提供的初始列表,并取決于安裝在服務(wù)器上的服務(wù)及軟件。以O(shè)racle數(shù)據(jù)提供者為例,要求在客戶機(jī)上安裝Oracle的客戶端軟件。
可以從別的制造商那里獲得OLE DB提供者,用于其他數(shù)據(jù)存儲。甚至還可以編寫自己的提供者。在第11章,將演示如何
本文轉(zhuǎn)自
http://study.qqcf.com/web/241/26761.htm
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
