薛 源
(同濟大學,中國上海200093)
ASP.NET 是Microsoft.NET 平臺下的一部分。 它實現(xiàn)了Web 應用程序的快速開發(fā)。 其中連接數(shù)據(jù)庫的主流技術是通過ADO.NET 或ADO 實現(xiàn)的。本文基于ASP.NET 框架,介紹ADO 和ADO.NET 兩種數(shù)據(jù)庫訪問技術,然后就進行分析和研究。
ActiveX Data Objects (ADO)是微軟的一種數(shù)據(jù)訪問技術。 它被設計用來和數(shù)據(jù)訪問層OLE DB Provider 一起協(xié)同工作, 以提供通用數(shù)據(jù)訪問(Univer-sal Data Access)。 OLE DB 是一個低層的數(shù)據(jù)訪問接口,并基于微軟公司的COM 技術,用它可以訪問各種數(shù)據(jù)源,其模型如圖1 所示。ADO 的3 個主要組成對象是:Connection、RecordSet 和Command。
圖1 ADO 工作原理圖
(1)Connection 對象: 用于表示和數(shù)據(jù)源的連接,以及處理一些命令和事物。
(2)Command 對象:用于執(zhí)行某些命令來進行諸如查詢、修改數(shù)據(jù)庫結構的操作,并將返回結果存在Recordset 對象中。 也可以進行批操作和操縱數(shù)據(jù)庫的結構, 當然, 這需要使用的OLE DB Provider 提供相應的支持。 此外,可以將一個激活的Connection 對象綁定到Command 對象的ActiveConnection 屬性, 這使得多個Command 對象實例可以共用一個Connection 對象。
(3)RecordSet 對象:用于處理數(shù)據(jù)源的表格集,它是在表中修改、檢索數(shù)據(jù)的最主要的方法。 這些結果由數(shù)據(jù)的行(記錄)和列(字段)組成。
ADO 的幾個對象間的關系結構圖如圖2 所示。
圖2 ADO 結構圖
使用ADO 訪問數(shù)據(jù)元的特點可以概括如下:
(1)易于使用,可以說這是ADO 最重要的特點之一。
(2)ADO 是高層數(shù)據(jù)庫訪問技術,相對與ODBC 來說,具有面向對象的特點。
(3)在ADO 對象結構中,對象與對象之間的層次結構不是非常明顯,這會給編寫數(shù)據(jù)庫程序帶來更多的便利。比如,在應用程序中如果要使用記錄集對象,不一定要先建立連接、回話對象,如果需要就可以直接構造記錄集對象。
(4)可以訪問多種數(shù)據(jù)源。 和OLE DB 一樣,使應用程序具有很好的通用性和靈活性。
在ASP.NET 中使用ADO 時,首先要注意下面兩點:
(1)將set objCnn=server.CreateObject(″ADODB.Connection″)
Set objRS=server.CreateObject(″ADODB.Recordset″)
改成:objCnn=server.CreateObject(″ADODB.Connection″)
...
objRS=server.CreateObject(″ADODB.Recordset″)
(2)為了在ASP.NET 網(wǎng)頁里調(diào)用、使用STA(Single Thread Apartment) 的COM 組件, 程序必須在<% @Page...>前導指令加上aspcompat=”true”屬性;其余便和ASP 網(wǎng)頁使用ADO 一樣。 下面以一范例部分代碼為示例。
ADO.NET 是對ADO 的繼承,是一個用來存取數(shù)據(jù)和信息的API。它提供與OLE DB 接口兼容的數(shù)據(jù)源的數(shù)據(jù)存取接口,應用程序可以使用ADO.NET 連接到這些數(shù)據(jù)源來獲取、 操縱和更新數(shù)據(jù); 還提供SQLServer 編程接口, 對SQL Server 數(shù)據(jù)庫訪問效率比OLE DB 接口訪問SQL Server 數(shù)據(jù)庫效率高。其模型如圖3 所示。ADO.NET 的核心組件主要有三類,即Connection、DataSet 和Command。另外還添加了許多新的對象和程序化接口, 如:DataAdapter、DataView、DataReader 等等。
圖3 ADO.NET 工作原理圖
(1)Connection 對象:Connection 對象在應用程序和數(shù)據(jù)庫之間建立連接。通過SQL Connection 對象建立與SQL Server 數(shù)據(jù)庫的鏈接到支持ADO Managed Provider 的數(shù)據(jù)來源。
(2)Command 對象:是設置SQL 命令、傳遞系統(tǒng)參數(shù)以及取得數(shù)據(jù)結果等,可以通過SQLCommand 對象直接操作SQLServer 數(shù)據(jù)庫,通過OLEDB Command 操作支持Managed Provider 的數(shù)據(jù)來源。
(3)DataSet 對象:DataSet 不是一個RecordSet, 而是類似數(shù)據(jù)庫(DataBase),在DataSet 中可以包含任意數(shù)量的數(shù)據(jù)表(DataTable),且每個表對應一個數(shù)據(jù)庫的數(shù)據(jù)表(Table)或視圖(View)。
(4)DataAdapter 對象: 它是提供連接DataSet 對象和數(shù)據(jù)源的橋梁,并且DataAdapter 使用Command 數(shù)據(jù)源中執(zhí)行的SQL 命令,以便將數(shù)據(jù)加載到DataSet 中,并使對DataSet 中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。
ADO.NET 的幾個對象間的關系結構如圖4 所示。
圖4 ADO.NET 結構圖
下面是一個簡單的ADO.NET 應用程序, 它從數(shù)據(jù)源中的三個表中返回結果并將其輸出到窗口的DataGrid 中:
ADO 與ADO.NET 既有相似也有區(qū)別,他們都能夠編寫對數(shù)據(jù)庫服務器中的數(shù)據(jù)進行訪問和操作應用程序,并且易于使用、速度快,內(nèi)存支出低、 占用磁盤空間較少, 支持用于建立基于客戶端/服務器和Web 的應用程序的主要功能。但是,他們也具有以下四個方便的差異,而它們的差異,換句話說,也是ADO.NET 的優(yōu)點所在。
(1)緩存中數(shù)據(jù)集的存儲形式。
ADO 中數(shù)據(jù)是以RecordSet 形式存儲, 它的數(shù)據(jù)來源于多個表,但在內(nèi)存中選擇只能集中和顯示在一個表中;ADO.NET 中的數(shù)據(jù)集是DataSet,它在緩存中可以是一個或多個表的數(shù)據(jù)庫。
(2)脫機與連機關系。
ADO.NET 采用的是離線數(shù)據(jù)集(Disconnect DataSet),ADO.NET 利用XML 制作數(shù)據(jù)的一份副本(快照副本snapshot),它除了制作副本時在線,其他時間都是離線的。而ADO 卻是一直與服務器連著的在線型訪問,數(shù)據(jù)訪問代價比較大。
(3)標準化程度。
XML 對ADO 支持非常有限,而ADO.NET 的設計包含了被廣泛接受的XML 標準,用戶與Web 信息共享及異構應用數(shù)據(jù)交換。
(4)傳輸性能。
傳輸性能方面ADO.NET 更強。 ADO 基于COM 技術, 必須符合COM 的規(guī)范,而ADO.NET 基于XML 數(shù)據(jù)格式,數(shù)據(jù)類型更為豐富,它不需要由COM 編排而進行數(shù)據(jù)類型轉換。 另外防火墻通常配置只允許HTML 文本通過,因為DataSet 序列化格式是XML,所以防火墻可以允許DataSet 通過,阻擋ADO 的記錄集。
ADO.NET 是新型的DotNET 數(shù)據(jù)庫訪問技術接口,它支持工業(yè)技術標準,集合了所有用于數(shù)據(jù)處理的類。 這些類代表了數(shù)據(jù)容器對象,它們以典型的數(shù)據(jù)庫功能為特色,如索引、排序和瀏覽,且ADO.NET是DotNET 數(shù)據(jù)庫應用程序最終的解決方案,它以整體設計為特色,而不是以數(shù)據(jù)庫為核心的ADO 模型。 ADO.NET 集成了ADO 對象模型與OLE DB 接口,圖1 和圖3 結合起來,可以體現(xiàn)這一點。 所以,ADO.NET 訪問技術不僅在以上四個方面比ADO 強, 而且在功能上增進不少,尤其為Web 應用程序的設計提供了一個更穩(wěn)定、更具有擴展性的數(shù)據(jù)庫存取技術,因此掌握ADO.NET 技術具有更深遠的意義。
[1]陳志泊.ASP.NET 數(shù)據(jù)庫應用程序開發(fā)教程[M].北京:人民郵電出版社,2005:86-87.
[2]廖信彥.ASP.NET 交互式Web 數(shù)據(jù)庫程序設計[M].北京:中國鐵道出版社,2003:102-138.
[3]田啟明.VB 中基于ADO 的數(shù)據(jù)庫訪問方法[J].電腦開發(fā)與應用,2004,17(6):33-34.