薛 源
(同濟大學,中國上海200093)
ASP.NET 是Microsoft.NET 平臺下的一部分。 它實現了Web 應用程序的快速開發。 其中連接數據庫的主流技術是通過ADO.NET 或ADO 實現的。本文基于ASP.NET 框架,介紹ADO 和ADO.NET 兩種數據庫訪問技術,然后就進行分析和研究。
ActiveX Data Objects (ADO)是微軟的一種數據訪問技術。 它被設計用來和數據訪問層OLE DB Provider 一起協同工作, 以提供通用數據訪問(Univer-sal Data Access)。 OLE DB 是一個低層的數據訪問接口,并基于微軟公司的COM 技術,用它可以訪問各種數據源,其模型如圖1 所示。ADO 的3 個主要組成對象是:Connection、RecordSet 和Command。

圖1 ADO 工作原理圖
(1)Connection 對象: 用于表示和數據源的連接,以及處理一些命令和事物。
(2)Command 對象:用于執行某些命令來進行諸如查詢、修改數據庫結構的操作,并將返回結果存在Recordset 對象中。 也可以進行批操作和操縱數據庫的結構, 當然, 這需要使用的OLE DB Provider 提供相應的支持。 此外,可以將一個激活的Connection 對象綁定到Command 對象的ActiveConnection 屬性, 這使得多個Command 對象實例可以共用一個Connection 對象。
(3)RecordSet 對象:用于處理數據源的表格集,它是在表中修改、檢索數據的最主要的方法。 這些結果由數據的行(記錄)和列(字段)組成。
ADO 的幾個對象間的關系結構圖如圖2 所示。

圖2 ADO 結構圖
使用ADO 訪問數據元的特點可以概括如下:
(1)易于使用,可以說這是ADO 最重要的特點之一。
(2)ADO 是高層數據庫訪問技術,相對與ODBC 來說,具有面向對象的特點。
(3)在ADO 對象結構中,對象與對象之間的層次結構不是非常明顯,這會給編寫數據庫程序帶來更多的便利。比如,在應用程序中如果要使用記錄集對象,不一定要先建立連接、回話對象,如果需要就可以直接構造記錄集對象。
(4)可以訪問多種數據源。 和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 網頁里調用、使用STA(Single Thread Apartment) 的COM 組件, 程序必須在<% @Page...>前導指令加上aspcompat=”true”屬性;其余便和ASP 網頁使用ADO 一樣。 下面以一范例部分代碼為示例。

ADO.NET 是對ADO 的繼承,是一個用來存取數據和信息的API。它提供與OLE DB 接口兼容的數據源的數據存取接口,應用程序可以使用ADO.NET 連接到這些數據源來獲取、 操縱和更新數據; 還提供SQLServer 編程接口, 對SQL Server 數據庫訪問效率比OLE DB 接口訪問SQL Server 數據庫效率高。其模型如圖3 所示。ADO.NET 的核心組件主要有三類,即Connection、DataSet 和Command。另外還添加了許多新的對象和程序化接口, 如:DataAdapter、DataView、DataReader 等等。

圖3 ADO.NET 工作原理圖
(1)Connection 對象:Connection 對象在應用程序和數據庫之間建立連接。通過SQL Connection 對象建立與SQL Server 數據庫的鏈接到支持ADO Managed Provider 的數據來源。
(2)Command 對象:是設置SQL 命令、傳遞系統參數以及取得數據結果等,可以通過SQLCommand 對象直接操作SQLServer 數據庫,通過OLEDB Command 操作支持Managed Provider 的數據來源。
(3)DataSet 對象:DataSet 不是一個RecordSet, 而是類似數據庫(DataBase),在DataSet 中可以包含任意數量的數據表(DataTable),且每個表對應一個數據庫的數據表(Table)或視圖(View)。
(4)DataAdapter 對象: 它是提供連接DataSet 對象和數據源的橋梁,并且DataAdapter 使用Command 數據源中執行的SQL 命令,以便將數據加載到DataSet 中,并使對DataSet 中數據的更改與數據源保持一致。
ADO.NET 的幾個對象間的關系結構如圖4 所示。

圖4 ADO.NET 結構圖
下面是一個簡單的ADO.NET 應用程序, 它從數據源中的三個表中返回結果并將其輸出到窗口的DataGrid 中:


ADO 與ADO.NET 既有相似也有區別,他們都能夠編寫對數據庫服務器中的數據進行訪問和操作應用程序,并且易于使用、速度快,內存支出低、 占用磁盤空間較少, 支持用于建立基于客戶端/服務器和Web 的應用程序的主要功能。但是,他們也具有以下四個方便的差異,而它們的差異,換句話說,也是ADO.NET 的優點所在。
(1)緩存中數據集的存儲形式。
ADO 中數據是以RecordSet 形式存儲, 它的數據來源于多個表,但在內存中選擇只能集中和顯示在一個表中;ADO.NET 中的數據集是DataSet,它在緩存中可以是一個或多個表的數據庫。
(2)脫機與連機關系。
ADO.NET 采用的是離線數據集(Disconnect DataSet),ADO.NET 利用XML 制作數據的一份副本(快照副本snapshot),它除了制作副本時在線,其他時間都是離線的。而ADO 卻是一直與服務器連著的在線型訪問,數據訪問代價比較大。
(3)標準化程度。
XML 對ADO 支持非常有限,而ADO.NET 的設計包含了被廣泛接受的XML 標準,用戶與Web 信息共享及異構應用數據交換。
(4)傳輸性能。
傳輸性能方面ADO.NET 更強。 ADO 基于COM 技術, 必須符合COM 的規范,而ADO.NET 基于XML 數據格式,數據類型更為豐富,它不需要由COM 編排而進行數據類型轉換。 另外防火墻通常配置只允許HTML 文本通過,因為DataSet 序列化格式是XML,所以防火墻可以允許DataSet 通過,阻擋ADO 的記錄集。
ADO.NET 是新型的DotNET 數據庫訪問技術接口,它支持工業技術標準,集合了所有用于數據處理的類。 這些類代表了數據容器對象,它們以典型的數據庫功能為特色,如索引、排序和瀏覽,且ADO.NET是DotNET 數據庫應用程序最終的解決方案,它以整體設計為特色,而不是以數據庫為核心的ADO 模型。 ADO.NET 集成了ADO 對象模型與OLE DB 接口,圖1 和圖3 結合起來,可以體現這一點。 所以,ADO.NET 訪問技術不僅在以上四個方面比ADO 強, 而且在功能上增進不少,尤其為Web 應用程序的設計提供了一個更穩定、更具有擴展性的數據庫存取技術,因此掌握ADO.NET 技術具有更深遠的意義。
[1]陳志泊.ASP.NET 數據庫應用程序開發教程[M].北京:人民郵電出版社,2005:86-87.
[2]廖信彥.ASP.NET 交互式Web 數據庫程序設計[M].北京:中國鐵道出版社,2003:102-138.
[3]田啟明.VB 中基于ADO 的數據庫訪問方法[J].電腦開發與應用,2004,17(6):33-34.