簡單又好學的ADO.NET框架
這里介紹一點我自己在使用ADO.NET過程中的一點點心得,包括Microsoft ADO.NET框架提供的各種對象之間對比,如何選擇較好的解決方案等。這些都有助于優化Microsoft ADO.NET應用程序。由于作者開發使用的是System.Data.SqlClient 命名空間下的SQL Server .NET 數據提供程序,所以本文在上述框架下展開。
ADO.NET框架是.NET應用程序的數據訪問模型。它能用于訪問關系型數據庫系統,如SQL Server 2000,及很多其它已經配備了OLE DB供應器的數據源。在某種程度上,ADO.NET代表了***版本的ADO技術。然而,ADO.NET引入了一些重大變化和革新,它們專門用于結構松散的、本質非鏈接的Web應用程序。
ADO.NET框架引入的一個重要變化是,用DataTable, DataSet, DataAdapter, 和 DataReader對象的組合代替了ADO Recordset對象。DataTable表示來自一個表的行集合,在這方面它與Recordset類似。DataSet表示DataTable對象的集合,及與其它表綁定在一起的關系和限制。實際上,DataSet是具有內置的擴展標記語言(XML)支持的內存中的關聯結構。
#T#DataSet的一個主要特點是,它對底層的數據源一無所知,而這些數據源可能用于對其進行填充。這是一個分離的用于表示數據集合的獨立實體,并且它可通過多層應用程序的不同層由一個組件傳遞到另一組件。它也可作為XML 數據流被序列化,因而非常適合于不同類型平臺間的數據傳輸。ADO.NET使用DataAdapter對象為發送到和來自DataSet及底層數據源的數據建立通道。DataAdapter對象還支持增強的批更新特性,以前這是Recorder的相關功能。
何時使用DataSet和DataReader
ADO.NET 提供以下兩個對象,用于檢索關系數據并將其存儲在內存中:DataSet 和 DataReader。DataSet 提供一個內存中數據的關系表示形式,一整套包括一些表在內的數據(這些表包含數據、對數據進行排序并約束數據),以及表之間的關系。DataReader 提供一個來自數據庫的快速、只進、只讀數據流。當設計應用程序時,要考慮應用程序所需功能的等級,以確定使用 DataSet 或者是 DataReader。要通過應用程序執行以下操作,就要使用 DataSet:在結果的多個離散表之間進行導航。操作來自多個數據源(例如,來自多個數據庫、一個 XML 文件和一個電子表格的混合數據)的數據。在各層之間交換數據或使用 XML Web 服務。與 DataReader 不同的是,DataSet 能傳遞給遠程客戶端。
重用同樣的行組,以便通過緩存獲得性能改善(例如排序、搜索或篩選數據)。每行執行大量處理。對使用 DataReader 返回的每一行進行擴展處理會延長服務于 DataReader 的連接的必要時間,這影響了性能。使用 XML 操作對數據進行操作,例如可擴展樣式表語言轉換(XSLT 轉換)或 XPath 查詢。
對于下列情況,要在應用程序中使用 DataReader:不需要緩存數據。要處理的結果集太大,內存中放不下。一旦需要以只進、只讀方式快速訪問數據。