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















 
 
 
 
 
 
 