ado+ 從一開始就被設計為對斷開的數據集進行操作。斷開的記錄集只能有益于應用程序,因為它們是數據的本地視圖,能夠較快地處理和傳輸數據。ado+ 將 xml 用作通用的傳輸格式。只要接收組件運行于有 xml 分析程序可用的平臺上,就可以提供許多功能,同時確保互操作性。通過 xml 進行傳輸時,接收者不再必須是一個 com 對象。xml 是一種簡單但卻功能強大的基于文本的標準,它近來已廣為業界所接受,因而,目前有理由期待差不多每個平臺上都會有一個 xml 分析程序。這樣的話,接收組件就不會有任何的體系結構限制。任何一對軟件組件都可以共享 ado+ 數據,只要它們同意將相同的 xml 架構用于傳輸數據格式。圖 2 對 ado+ 適用于現有體系結構的方式進行了說明。
圖 2. 在 dna 方案中使用 ado+
表示層可以通過 win forms 或 web forms(這兩種編程單元專用于 microsoft visual studio.net 平臺)使用或創建數據集。在任一種情況下,運行于業務層的組件都接收一個 xml 流并進行任意處理。這些組件可以重新構建一個 ado+ 環境,也可以將數據按原始 xml 處理并使其適合于發送到物理數據存儲器中。業務組件可以獲取 ado+ 數據,將其轉換為 xml,然后將其發送回客戶機。任何可以理解 xml 的應用程序都可以在任一點上介入這一架構。
將 xml 用作數據集的傳輸語言可以比 ado 更有效地進行數據共享。首先,繞過諸如記錄集之類的 com 對象所必需的 com 匯集使組件可以使用它們要使用的任意數據類型的集合。這還會帶來更好的性能,因為不再需要確保記錄符合標準的 com 數據類型的數據類型轉換。xml 和 http 的使用還允許數據跳過防火墻。正常情況下,防火墻允許 http 數據包通過,但會阻止任何試圖經由端口號不是 80 的端口進來的任何其它內容通過。
一種用于輸入和輸出的基于 xml 的標準控制臺。 ado 記錄集基本上是一種(可能是分層的)記錄集合,它帶有一些特定方法,用于完成一些有趣功能。其中包括包括滾動、排序、過濾、書簽。記錄集本質上是表在內存中的副本。而數據集看起來更象 sql server 或 access 數據庫,它是一個包含更多表、特定視圖和外鍵關系的實體。
ado 記錄集允許您將內容保存到 xml 中,并從一個外部 xml 文件重新構建該內容。然而,采用的缺省 xml 架構是針對導出/導入 ado 記錄集而優化的,而不是針對實際數據交換。ado xml 架構包含許多關于列類型和位置以及其它元數據的信息。如果您希望從某一 xml 文檔中重新構建記錄集,則這些信息是至關重要的,但如果您只是希望傳遞數據并使接收者使用它,則這些信息沒有什么用處。有了 ado+ 數據集,xml 架構更為精練,因為被表示的對象與關系數據庫沒有直接關系,盡管對象可以用來精密地再現數據庫。ado+ 數據集對數據進行描述,而 ado 記錄集則對由某一表中獲取的一個記錄集合進行描述。這就是 ado+ 數據模型的動人之處。
ado+ xml 架構只是再現表以及數據集中定義的關系,構建一個 dataset 對象的責任則留給 ado+ 運行時完成。ado xml 格式由于過于具體而無法真正實現互操作。它還由于過于繁瑣,如果不進行數據壓縮的人工干預,它就無法進行高效的匯集。ado+ 數據集體系結構的鼓舞人心的原則與導致我創建 javascript 的 recordset 對象的原因之間存在一種底層的相似之處。在這兩種情形中,您都將數據說明(例如,一個 xml 字符串)轉換為一個專用于平臺的操作對象(即一個 javascript 對象)。在這樣做的過程中,您安全地將您的數據從一層發送到另一層,而不考慮安裝的操作系統或軟件。
dim ocn as sqlconnection dim ocmd as sqlcommand dim odr as adodatareader ocn = new sqlconnection(strnwind) ocmd = new sqlcommand("mystoredproc 'davolio'", ocn) ocmd.commandtype = commandtype.storedprocedure try ocn.open() ocmd.execute(odr)
while odr.read console.writeline(odr("lastname").tostring)) end while catch e as exception console.writeline(e.tostring) finally odr.close() ocn.close() end try
請注意,上述代碼具有 microsoft visual basic® 7.0 引入的一些語法元素的特征 — 特別是最終取代了 on error 機制的 try-catch 結構。ado+ 代碼充分利用了提供諸如 console 之類的系統對象的.net 運行時服務。