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