ADO+ 引導資料種類的演變 (轉自 ms 二)

來源:互聯網
上載者:User
ado|資料 ADO+ 增加了哪些內容?

用最抽象的話來說,ADO+ 是具有更大的延展性和互通性的 ADO。就物件模型及編程問題而言,ADO 與 ADO+ 是完全不同的兩個實體。儘管這樣,ADO+ 源自 ADO 並保留了它的鼓舞人心的原則。

以更多互通性和延展性充實 ADO 的關鍵在於斷開這個概念。在允許客戶機端的指令碼代碼實現諸如排序、過濾和文檔/視圖模型之類的有趣和互動式功能的同時,斷開的記錄集作為一種保留系統資源的方式被引入到 ADO 2.0 中。ADO+ 與 ADO 相比具有三個主要優點:互通性、增強延展性以及強型別。此外,ADO+ 便於資料群組件間的資料共用以及在表中的記錄間進行導航。

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 的應用程式都可以在任一點上介入這一架構。

延展性是分布式系統在不喪失效率的情況下對數目逐漸增長的客戶機進行服務的能力。延展性是一個常與資料庫有關的術語,這是由於分布式系統很大程度上依賴於資料庫。延展性無論對於資料庫伺服器還是對於封裝了資料訪問操作的任何軟體製品都是一個可以持續存在的問題。延展性的最大敵人就是對關鍵資源的濫用。在分布式系統中,關鍵通常意味著有限。資料庫連接就是可以影響延展性的關鍵資源的一個樣本。固定數目的串連的可用性對系統的增長及其能力形成了一個實際的限制。好的軟體瞭解這種情況並採取適當措施限制其影響。ADO+ 對這一問題的處理是怎樣優於 ADO 的呢?並不是說 ADO 是不可伸縮的,而是說對斷開的和記憶體中的表的內在使用(這是 ADO+ 的特徵)使 ADO+ 成為內在具有更大延展性的解決方案。它具有更大延展性的原因在於斷開的資料集不在很長的時間內保留鎖或保持開啟串連。如果使用 ADO,您必須編寫代碼才能獲得這一功能;而使用 ADO+ 則會免費獲得這一功能。

將 XML 用作資料集的傳輸語言可以比 ADO 更有效地進行資料共用。首先,繞過諸如記錄集之類的 COM 物件所必需的 COM 彙集使組件可以使用它們要使用的任意資料類型的集合。這還會帶來更好的效能,因為不再需要確保記錄符合標準的 COM 資料類型的資料類型轉換。XML 和 HTTP 的使用還允許資料跳過防火牆。正常情況下,防火牆允許 HTTP 資料包通過,但會阻止任何試圖經由連接埠號碼不是 80 的連接埠進來的任何其它內容通過。


--------------------------------------------------------------------------------


ADO+ 的構成要素

現在我要介紹主要的 ADO+ 對象。我們以所有內容的起源開始,即 DataSet 對象。

資料集是 ADO 記錄集的演化。資料集不過是資料庫的中斷連線的記憶體中的視圖。就您可以擁有動態建立的資料集和資料表而不需要來自資料庫管理系統 (DBMS) 的任何資訊而言,資料集與資料來源沒有任何嚴格意義上的關係。換句話說,資料集使用了一些添加到 ADO 記錄集中的功能:斷開時工作的能力以及計劃性地建立並以任何種類資料進行置入。資料集可以包含任意數目的表,每個表通常(但不總是)對應於一個資料庫表或視圖。DataTable 對象對應的表不過是一些行與列的集合。每一行保留其原始狀態及其目前狀態。

ADO 記錄集一直經常以一種充當某種超級數組的通用資料類型出現。同樣,ADO+ 資料集是一種提供以下功能的超級記錄集:

一種容納資料的更好和更豐富的編程介面。


一種不需要與實際資料來源的任何內在綁定而提供更為廣義的資料檢視的物件模型。


一種用於輸入和輸出的基於 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 對象)。在這樣做的過程中,您安全地將您的資料從一層發送到另一層,而不考慮安裝的作業系統或軟體。


--------------------------------------------------------------------------------


ADO+ 命令

儘管 DataSet 對象提供一個記憶體中資料存放區的工具,您還需要另一個工具對各種表進行建立和初始化。這一工具就是 DataSetCommand 對象,它代表一個將使用串連和命令的細節隱藏起來的集中式控制台。DataSetCommand 對象允許某一 DataSet 對象與來源資料儲存空間間的資料檢索和儲存。它負責從實體儲存體器中提取資料,然後將其推送到各資料表和關係中。DataSetCommand 對象還負責向實際資料庫傳輸任何更新、插入或刪除操作。DataSetCommand 對象通過底層 OLE DB 提供者能夠理解的 SQL 命令或命令字串完成這一功能。DataSetCommand 對象以兩種形式存在:

SQLDataSetCommand 對象


ADODataSetCommand 對象
它們可以被當作在資料表和資料來源中的對應表之間的代理。資料來源是用於 SQLDataSetCommand 對象的 SQL Server 7.0(或更新版本)以及用於 ADODataSetCommand 對象的任何其它 OLE DB 提供者。

一般說來,ADO+ 能夠識別並處理兩種類型的資料來源:SQL Server 7.0(及更新版本)以及可以通過 OLE DB 提供者進行訪問的任何資料來源。這些又稱為被管理的提供者。

作為使用 DataSetCommand 對象的一種替換(如程式碼範例 1 中所示),您可以通過使用諸如串連和命令之類的較為熟悉的對象,直接對被管理的提供者進行操作。

程式碼範例 1

Dim oDS as DataSet
Dim oCMD as SQLDataSetCommand

oDS = New DataSet
oCMD = new SQLDataSetCommand("Select * from employees", strConn)
oCMD.FillDataSet(oDS, "EmployeesList")

Dim oRow as DataRow
For Each oRow in oDS.Tables(0).Rows
   Console.WriteLine(oRow(0).ToString())
Next

通過查看這種類型的 ADO+ 代碼,您會發現它與舊式的 ADO 編程沒有多大的差別。它具有新的對象、新的編程介面、經過改進的新功能,但代碼模式相同。如程式碼範例 2 中所示。

程式碼範例 2

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 運行時服務。

還有什麼特殊的功能可以協助您確定革新的 DataSetCommand 方法是否優於使用傳統的 ADO 嗎?通過使用 DataSetCommand 對象與資料來源進行通訊,基本上與通過使用 ADO 連線和命令相同,並帶有一個重要的推論:所有的 ADO+ 對象,如 DataSetCommand 對象,都可以通過派生新的、更專用的類而進行定製。因此,舉例來說,您可以控制將資料集的更改傳送到資料庫的方式,以及(比方說)最佳化效能、對資料進行壓縮或加密、執行資料驗證以及許多其它功能。


--------------------------------------------------------------------------------


強型別編程

您通過 ADO 對資料庫物件和類似 Recordset 和 Fields 的集合進行操作。除了將實際資料視為某種參數外,這種方法沒有什麼錯誤:

Set oRS = New ADODB.Recordset
oRS.Open strSQL, strConn
While Not oRS.EOF
MsgBox oRS("FirstName") & " " & oRS("LastName")
oRS.MoveNext
Wend

在上述 ADO 代碼片斷中,第一個和最後一個名稱被用作進入 Recordset 和 Fields 集合的進入點。由於 Visual Basic 的預設屬性,您可以編寫相對容易閱讀的代碼。依照 ADO,某一給定記錄欄位的“完整物件模型路徑”應為:

oRS.Fields("firstname").value

此外,ADO 總是使用 Variant 資料類型,以便與基於指令碼的環境(特別是 ASP)相一致。

ADO+ 通過提供藉助資料的自然名稱對儲存於資料集中的資料進行訪問的能力,使資料庫編程更進了一步。如果要在某一資料集中定址某一表,您可以使用該表的 ADO+ 名稱並對使用列和行的名稱對列和行進行訪問,而不是通過基於集合的方法。此外,所有的有關變數都擁有一個特定的(與 Variant 相對)資料類型。這稱為強型別編程。上面顯示的對一個 Employees 表中的 FirstName 和 LastName 進行操縱的代碼可以按下面的形式重新編寫:

MsgBox Employees.FirstName & " " & Employees.LastName

一種具有類型的 DataSet 即是一個自 DataSet 繼承的類。採用資料集的強型別版本是有益的,原因是 IDE 自身可以即時地向您通知可能的類型不符錯誤,而且 Microsoft IntelliSense® 技術可以隨時向您建議一些方法和屬性。


--------------------------------------------------------------------------------


摘要

ADO+ 不僅僅是對資料進行操作的另一個物件模型。從本質上說,它是在範圍更廣、跨平台方案中的 ADO 的重現。ADO+ 是擴充的 ADO,它在能夠理解 XML 的任何平台上與任何軟體組件協同工作。它對資料進行建模,而不是對資料庫或資料提供者。它從資料庫基礎結構中提取資料,並將其置於一種中性的環境中,資料在這種環境中就是資料,無論儲存介質、物理結構或用來對其進行訪問的 API 究竟是什麼。其關鍵即是 XML,它代表了一種用於 ADO+ 資料集的 I/O 控制台。另一個重要的方面是主要對象(即資料集)的中斷連線和在記憶體中的性質。

因此,您可以發送資料的 XML 說明,並讓 ADO+ 伺服器端的組件將其構建為一個資料集。您也可以擁有非 ADO+ 組件,它們只是擷取該 XML 說明後對其運行自己的剖析器並獲得同樣的結果。ADO+ 專用於 Windows,但它可以與幾乎所有的平台交換資料。請留意跟蹤 ADO+ 演變的後續文章。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。