圖1表示層通?;贖TML輸出,并能夠很好地與任何較新的瀏覽器一起工作。網頁是在 Web服務器上使用Active Server Pages (ASP)構建的,并且只有在一些相當特殊的情況下才試圖通過COM、動態HTML和XML支持來提供瀏覽器的實際功能。 關鍵之處是中間層,其中通常有一層或多層業務對象獲取并交換數據來響應用戶的輸入。這些組件可能需要彼此傳遞數據,并且在傳遞數據的過程中,它們需要一種易于使用、功能強大并為所有組件所理解的公用數據格式。
ADO記錄集(表或視圖的ADO表示)是一個相當不錯的解決方案。 ADO記錄集的靈活性足以使你能夠毫不費力地定位記錄以及使用過濾器和書簽。它們還提供排序、自動分頁和持久性等功能,并能在與數據源斷開時工作??梢栽诙鄬又g相當高效地匯集記錄集。 不過只有COM對象才能使用ADO記錄集。這在COM/DCOM在業務層中占主導地位的同構體系結構中是合適的。但涉及到諸如大型機或Unix平臺之類的異構節點時,就會帶來很大的不便。 在可編程Web時代需要一種能同時跨越各種平臺的操作數據的編程接口,但目前現實中的ADO,特別是記錄集,是在Windows 和基于 COM的方案中操縱數據的強有力的工具。隨著系統逐漸向完全的Inte.net互操作性方向演變,它們逐漸喪失了其吸引力。
在完美的情況下,應該能夠在任何平臺或設備上以相同的方式訪問數據,并具有相同的靈活性。這樣,每個平臺或設備都可以根據需要自由地操縱數據。但如果通過ADO記錄集操作數據,則會使自己和應用程序陷于有限互操作性之中。目前,如果通過ADO對數據進行訪問,并希望將其傳送到遠程組件,要么使用從數據訪問模塊獲得的相同的ADO記錄集,要么將其轉換為能夠通過網絡傳送的另外的東西,最為重要的是,能夠在其最終目的地被理解。記錄集需要COM匯集,舉例來說,COM調用并不是總能穿過公司防火墻。此外,在對ADO記錄集進行匯集時,總處理時間的很大部分是用于完成必要的類型轉換。事實上,必須確保記錄中的所有的值映射到COM能夠識別并知道如何進行處理的有效數據類型。當有關的組件在物理上是分開的并在不同的機器上運行時,COM匯集因素變得更為重要。因此,在向完全由Internet連接起來的世界前進的過程中,目前的Windows數據種類連同ADO記錄集必須有所發展才能繼續存在下去。 ADO需要改變是由于跨平臺模塊的交互作用需要一個通用數據模型。此外,我們不希望這個改變太大,原因是ADO內還存在若干很好的功能,放棄它們是一件可惜的事情。我們需要提取ADO記錄集的本質,并將其重新構建成可以便利地在任意平臺上進行傳輸和處理的另外一種東西。HTTP提供了被大多數人廣泛接受的網絡渠道。XML將廣泛接受的數據描述的基礎結構集合在一起。ADO.NET是對ADO的較小改進,它使之成為一個用于創建分布式和數據共享應用程序的基于各種標準的編程模型。
所有ADO.NET對象的基本原理和根源都是DataSet對象模型。
DataSet是ADO記錄集的延伸。DataSet是一個簡單、獨立、存在于內存中的數據庫視圖。如果一個DataSet和數據源之間沒有限制條件,在這種情況下的DataSet可以被動態地創建。DataSet使用了一些添加到ADO記錄集中的功能:斷開時工作的能力或用各種數據類型來填充和創建應用程序的能力等。一個DataSet可以包含任意數目的表,每個表通常(但不總是)對應于一個數據庫表或視圖。一個表(DataTable 對象)是一些行與列的集合,每一條記錄行均保留其原始狀態及其當前狀態。
ADO 記錄集經常被看作為一種高級的數組形式。同樣,DataSet是一種提供以下功能的超級記錄集:
☆ 一種容納數據的更好和更豐富的編程接口;
☆ 一種提供更為廣義的數據視圖的對象模型;
☆ 一種用于輸入和輸出的基于XML的標準控制臺。
ADO 記錄集基本上是一種(可能是分層的)記錄集合,它帶有一些特定方法,用于完成一些特定功能。其中包括滾動、排序、過濾、書簽。記錄集本質上是表在內存中的副本。而DataSet看起來更象SQL Server 或Aclearcase/" target="_blank" >ccess數據庫,它是一個包含更多表、特定視圖和外鍵關系的實體。DataSet對象模型反映了這一較大的范圍,它允許查看跨越多個數據表、關系、擴展屬性和行的多個集合的可用數據,還可用于說明非持久數據或來自不是數據庫的另一個持久存儲介質的數據。
ADO 記錄集允許將內容保存到XML中,并從一個外部XML文件重新構建該內容。然而,采用的缺省XML架構是針對導出/導入ADO 記錄集而優化的,而不是針對實際數據交換的。ADO XML架構包含許多關于列類型和位置以及其他元數據的信息。如果希望從某一XML文檔中重新構建記錄集,則這些信息是至關重要的,但如果只是希望傳遞數據并使接收者使用它,則這些信息沒有什么用處。有了DataSet,XML架構更為精練,因為被表示的對象與關系數據庫沒有直接關系,盡管對象可以用來再現數據庫。DataSet對數據進行描述,而ADO 記錄集則對由某一表中獲取的一個記錄集合進行描述。這就是ADO.NET數據模型的吸引之處。
ADO.NET XML架構只是負責再現表以及數據集中定義的關系,構建一個DataSet對象的責任則留給ADO.NET運行時完成。ADO XML格式由于過于具體而無法真正實現互操作。又因為它過于繁瑣,所以如果不進行數據壓縮的人工干預,它將無法進行匯集。而在DataSet體系結構中,可以安全地將數據從一層發送到另一