使 DataSet 與 XmlDataDocument 同步的樣本(節點和欄位對應的編程)

來源:互聯網
上載者:User
 

允許通過相關的 DataSet 儲存、檢索和操作結構化資料。

有關此類型所有成員的列表,請參閱 XmlDataDocument 成員。

System.Object
   System.Xml.XmlNode
      System.Xml.XmlDocument
         System.Xml.XmlDataDocument

 

[C#]public class XmlDataDocument : XmlDocument

 

 

[C++]public __gc class XmlDataDocument : public XmlDocument
安全執行緒

此類型的所有公用靜態(Visual Basic 中為 Shared)成員對多線程操作而言都是安全的。但不保證任何執行個體成員是安全執行緒的。

備忘

此類擴充了 XmlDocument。它使您可以載入關係資料或 XML 資料,並使用 W3C 文件物件模型 (DOM) 操作這些資料。DOM 將資料顯示為節點對象階層。由於 XmlDataDocument 實現 IXPathNavigable 介面,因此它還可用作 XslTransform 類的來源文件。

XmlDataDocumentDataSet 類有密切的從屬關係,後者提供所載入的 XML 資料的關係視圖。對 XmlDataDocument 所做的任何更改都將反映在 DataSet 中,反之亦然。

若要將 XML 資料載入到 DataSet 中,請使用 ReadXmlSchema 產生關係映射。然後,可以使用 Load 或 LoadXml 載入 XML 資料。

若要載入關係資料,請將內含項目關聯性資料的 DataSet 指定為 XmlDataDocument 建構函式中的參數。

要求

命名空間: System.Xml

平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列

程式集: System.Data (在 System.Data.dll 中)

初始化 XmlDataDocument 類的新執行個體。
重載列表
初始化 XmlDataDocument 類的新執行個體。
[C#] public XmlDataDocument();
[C++] public: XmlDataDocument();
用指定的 DataSet 初始化 XmlDataDocument 類的新執行個體。
[C#] public XmlDataDocument(DataSet);
[C++] public: XmlDataDocument(DataSet*);
樣本
[Visual Basic, C#] 下面的樣本將一份客戶表載入到 XmlDataDocument 中。
[Visual Basic, C#] 此樣本使用 SQL Server 2000 Northwind 資料庫。
[Visual Basic, C#] 注意   此樣本顯示如何使用 XmlDataDocument 建構函式的一個重載版本。有關其他可用樣本,請參閱單獨的重載主題。
[C#]
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;

public class Sample
{
  public static void Main()
  {
     DataSet dsNorthwind = new DataSet();

     //Create the connection string.          
     String sConnect;
     sConnect="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind";    
        
     //Create a connection object to connect to the northwind db.
     SqlConnection nwconnect = new SqlConnection(sConnect);

     //Create a command string to select all the customers in the WA region.
     String sCommand = "Select * from Customers where Region='WA'";

     //Create an adapter to load the DataSet.
     SqlDataAdapter myDataAdapter = new SqlDataAdapter(sCommand, nwconnect);

     //Fill the DataSet with the selected records.
     myDataAdapter.Fill(dsNorthwind,"Customers");

     //Load the document with the DataSet.
     XmlDataDocument doc = new XmlDataDocument(dsNorthwind);  

     //Display the XmlDataDocument.
     doc.Save(Console.Out);
   
  }
}

本節示範訂單處理過程中的一個步驟,該步驟將使用與 XmlDataDocument 同步的強型別 DataSet。隨後的樣本將建立具有最小化架構的 DataSet,它僅匹配源 XML 文檔的一部分。這些樣本將使用 XmlDataDocument 來避免源 XML 文檔失真,從而使 DataSet 可用來公開 XML 文檔的子集。

以下 XML 文檔包含所有與訂單相關的資訊:客戶資訊、訂購的貨物、發貨資訊等。

<?xml version="1.0" standalone="yes"?><PurchaseOrder><Customers><CustomerID>CHOPS</CustomerID><Orders><OrderID>10966</OrderID><OrderDetails><OrderID>10966</OrderID><ProductID>37</ProductID><UnitPrice>26</UnitPrice><Quantity>8</Quantity><Discount>0</Discount></OrderDetails><OrderDetails><OrderID>10966</OrderID><ProductID>56</ProductID><UnitPrice>38</UnitPrice><Quantity>12</Quantity><Discount>0.15</Discount></OrderDetails><OrderDetails><OrderID>10966</OrderID><ProductID>62</ProductID><UnitPrice>49.3</UnitPrice><Quantity>12</Quantity><Discount>0.15</Discount></OrderDetails><CustomerID>CHOPS</CustomerID><EmployeeID>4</EmployeeID><OrderDate>1998-03-20T00:00:00.0000000</OrderDate><RequiredDate>1998-04-17T00:00:00.0000000</RequiredDate><ShippedDate>1998-04-08T00:00:00.0000000</ShippedDate><ShipVia>1</ShipVia><Freight>27.19</Freight><ShipName>Chop-suey Chinese</ShipName><ShipAddress>Hauptstr. 31</ShipAddress><ShipCity>Bern</ShipCity><ShipPostalCode>3012</ShipPostalCode><ShipCountry>Switzerland</ShipCountry></Orders><CompanyName>Chop-suey Chinese</CompanyName><ContactName>Yang Wang</ContactName><ContactTitle>Owner</ContactTitle><Address>Hauptstr. 29</Address><City>Bern</City><PostalCode>3012</PostalCode><Country>Switzerland</Country><Phone>0452-076545</Phone></Customers><Shippers><ShipperID>1</ShipperID><CompanyName>Speedy Express</CompanyName><Phone>(503) 555-9831</Phone></Shippers><Shippers><ShipperID>2</ShipperID><CompanyName>United Package</CompanyName><Phone>(503) 555-3199</Phone></Shippers><Shippers><ShipperID>3</ShipperID><CompanyName>Federal Shipping</CompanyName><Phone>(503) 555-9931</Phone></Shippers><Products><ProductID>37</ProductID><ProductName>Gravad lax</ProductName><QuantityPerUnit>12 - 500 g pkgs.</QuantityPerUnit><UnitsInStock>11</UnitsInStock><UnitsOnOrder>50</UnitsOnOrder><ReorderLevel>25</ReorderLevel></Products><Products><ProductID>56</ProductID><ProductName>Gnocchi di nonna Alice</ProductName><QuantityPerUnit>24 - 250 g pkgs.</QuantityPerUnit><UnitsInStock>21</UnitsInStock><UnitsOnOrder>10</UnitsOnOrder><ReorderLevel>30</ReorderLevel></Products><Products><ProductID>62</ProductID><ProductName>Tarte au sucre</ProductName><QuantityPerUnit>48 pies</QuantityPerUnit><UnitsInStock>17</UnitsInStock><UnitsOnOrder>0</UnitsOnOrder><ReorderLevel>0</ReorderLevel></Products></PurchaseOrder>

 

在處理以上 XML 文檔包含的訂單資訊時,其中一個步驟是利用公司當前的庫存來為訂單供貨。負責從公司倉庫中給訂單供貨的職員不需要查看訂單的全部內容,他們只需要查看該訂單的產品資訊。若要僅從 XML 文檔中公開產品資訊,可建立一個強型別 DataSet,該 DataSet 以 XML 結構定義語言 (XSD) 架構的形式來編寫,並具有映射到所訂購的產品及數量的架構。有關強型別 DataSet 對象的更多資訊,請參見使用類型化的 DataSet。

以下代碼顯示從其中為該樣本產生的強型別 DataSet 的架構。

<?xml version="1.0" standalone="yes"?><xs:schema id="OrderDetail" xmlns=""xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:codegen="urn:schemas-microsoft-com:xml-msprop"xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element name="OrderDetail" msdata:IsDataSet="true"><xs:complexType><xs:choice maxOccurs="unbounded"><xs:element name="OrderDetails" codegen:typedName="LineItem" codegen:typedPlural="LineItems"><xs:complexType><xs:sequence><xs:element name="OrderID" type="xs:int" minOccurs="0" codegen:typedName="OrderID"/><xs:element name="Quantity" type="xs:short" minOccurs="0" codegen:typedName="Quantity"/><xs:element name="ProductID" type="xs:int" minOccurs="0" codegen:typedName="ProductID"/></xs:sequence></xs:complexType></xs:element><xs:element name="Products" codegen:typedName="Product" codegen:typedPlural="Products"><xs:complexType><xs:sequence><xs:element name="ProductID" type="xs:int" minOccurs="0" codegen:typedName="ProductID"/><xs:element name="ProductName" type="xs:string" minOccurs="0" codegen:typedName="ProductName"/><xs:element name="QuantityPerUnit" type="xs:string" minOccurs="0" codegen:typedName="QuantityPerUnit"/><xs:element name="UnitsInStock" type="xs:short" minOccurs="0" codegen:typedName="UnitsInStock"/><xs:element name="UnitsOnOrder" type="xs:short" minOccurs="0" codegen:typedName="UnitsOnOrder"/><xs:element name="ReorderLevel" type="xs:short" minOccurs="0" codegen:typedName="ReorderLevel"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType><xs:unique name="Constraint1"><xs:selector xpath=".//Products" /><xs:field xpath="ProductID" /></xs:unique><xs:keyref name="Relation1" refer="Constraint1" codegen:typedChildren="GetLineItems" codegen:typedParent="Product"><xs:selector xpath=".//OrderDetails" /><xs:field xpath="ProductID" /></xs:keyref></xs:element></xs:schema>

 

請注意,DataSet 的架構中只包含來自初始 XML 文檔的 OrderDetailsProducts 元素的資訊。通過使 DataSetXmlDataDocument 同步,可確保未包含在 DataSet 中的元素保持在 XML 文檔中。

利用從 XML 結構描述(命名空間為 Northwind.FillOrder)產生的強型別 DataSet,可以通過使 DataSet 與從源 XML 文檔中載入的 XmlDataDocument 同步來公開初始 XML 文檔的一部分。請注意,從架構產生的 DataSet 包含結構,但不包含資料。在將 XML 載入到 XmlDataDocument 中時,將填入這些資料。如果試圖載入已經與包含資料的 DataSet 同步的 XmlDataDocument,則將引發異常。

當更新 DataSet(和 XmlDataDocument)後,XmlDataDocument 可以寫出經過修改的 XML 文檔,其中被 DataSet 忽略的元素仍保持不變(如下所示)。在訂單樣本中,當填充訂單項後,經過修改的 XML 文檔將傳遞到訂單過程的下一步(可能會傳遞到公司貨運部)。

 

[C#]using System;using System.Data;using System.Xml;using Northwind.FillOrder;public class Sample{public static void Main(){OrderDetail orderDS = new OrderDetail();XmlDataDocument xmlDoc = new XmlDataDocument(orderDS);xmlDoc.Load("Order.xml");foreach (OrderDetail.LineItem myItem in orderDS.LineItems){OrderDetail.Product myProd = myItem.Product;// Remove quantity from the current stock.myProd.UnitsInStock = (short)(myProd.UnitsInStock - myItem.Quantity);// If the remaining stock is less than the reorder level, order more.if ((myProd.UnitsInStock + myProd.UnitsOnOrder) < myProd.ReorderLevel)myProd.UnitsOnOrder = (short)(myProd.UnitsOnOrder + myProd.ReorderLevel);}xmlDoc.Save("Order_out.xml");}}

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.