共用方式為


巢狀資料關聯

在關係型資料表示中,個別資料表中的行使用一列或多列相互關聯。 在 ADO.NET DataSet中,會使用 DataRelation實作數據表之間的關聯性。 當您建立 DataRelation 時,數據行的父子關聯性只會透過關聯來管理。 數據表和數據行是個別的實體。 在 XML 提供之數據的階層式表示中,父子關聯性是由包含巢狀子元素的父元素表示。

為了方便當 DataSetXmlDataDocument 同步或使用 WriteXml 以 XML 資料形式編寫子物件的巢狀,DataRelation 會公開一個 Nested 屬性。 將 Nested 的屬性設為 true 時,這會導致關係的子列在以 XML 資料寫入或與 XmlDataDocument 同步時被巢狀在父欄位中。 Nested的性質DataRelation預設為

例如,請考慮下列 DataSet

' Assumes connection is a valid SqlConnection.
Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter( _
  "SELECT CustomerID, CompanyName FROM Customers", connection)
Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter( _
  "SELECT OrderID, CustomerID, OrderDate FROM Orders", connection)

connection.Open()

Dim dataSet As DataSet = New DataSet("CustomerOrders")
customerAdapter.Fill(dataSet, "Customers")
orderAdapter.Fill(dataSet, "Orders")

connection.Close()

Dim customerOrders As DataRelation = dataSet.Relations.Add( _
  "CustOrders", dataSet.Tables("Customers").Columns("CustomerID"), _
  dataSet.Tables("Orders").Columns("CustomerID"))
// Assumes connection is a valid SqlConnection.
SqlDataAdapter customerAdapter = new SqlDataAdapter(
  "SELECT CustomerID, CompanyName FROM Customers", connection);
SqlDataAdapter orderAdapter = new SqlDataAdapter(
  "SELECT OrderID, CustomerID, OrderDate FROM Orders", connection);

connection.Open();

DataSet dataSet = new DataSet("CustomerOrders");
customerAdapter.Fill(dataSet, "Customers");
orderAdapter.Fill(dataSet, "Orders");

connection.Close();

DataRelation customerOrders = dataSet.Relations.Add(
  "CustOrders", dataSet.Tables["Customers"].Columns["CustomerID"],
  dataSet.Tables["Orders"].Columns["CustomerID"]);

由於此DataSetNested屬性未設定為true,當其以 XML 資料表示時,子物件不會巢狀於父元素中。 將描述包含相關資料集且非巢狀資料關係之DataSet轉換,可能導致效能降低。 建議您嵌套數據關係。 要做到這點,請將屬性 Nested為 true。 然後在 XSLT 樣式表單中撰寫程式代碼,以使用由上而下階層式 XPath 查詢表示式來尋找和轉換數據。

以下程式碼範例展示了呼叫 WriteXml 資料 的結果。

<CustomerOrders>
  <Customers>
    <CustomerID>ALFKI</CustomerID>
    <CompanyName>Alfreds Futterkiste</CompanyName>
  </Customers>
  <Customers>
    <CustomerID>ANATR</CustomerID>
    <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
  </Customers>
  <Orders>
    <OrderID>10643</OrderID>
    <CustomerID>ALFKI</CustomerID>
    <OrderDate>1997-08-25T00:00:00</OrderDate>
  </Orders>
  <Orders>
    <OrderID>10692</OrderID>
    <CustomerID>ALFKI</CustomerID>
    <OrderDate>1997-10-03T00:00:00</OrderDate>
  </Orders>
  <Orders>
    <OrderID>10308</OrderID>
    <CustomerID>ANATR</CustomerID>
    <OrderDate>1996-09-18T00:00:00</OrderDate>
  </Orders>
</CustomerOrders>

注意元素 Customers 與元素 Orders 以兄弟元素形式顯示。 如果你想讓這些 Orders 元素作為各自父元素的子元素出現,就需要將 DataRelation 的屬性 Nested 設為 true,並加入以下內容:

customerOrders.Nested = True
customerOrders.Nested = true;

以下程式碼展示了最終輸出的樣貌,元素 Orders 會巢狀於各自的父元素中。

<CustomerOrders>
  <Customers>
    <CustomerID>ALFKI</CustomerID>
    <Orders>
      <OrderID>10643</OrderID>
      <CustomerID>ALFKI</CustomerID>
      <OrderDate>1997-08-25T00:00:00</OrderDate>
    </Orders>
    <Orders>
      <OrderID>10692</OrderID>
      <CustomerID>ALFKI</CustomerID>
      <OrderDate>1997-10-03T00:00:00</OrderDate>
    </Orders>
    <CompanyName>Alfreds Futterkiste</CompanyName>
  </Customers>
  <Customers>
    <CustomerID>ANATR</CustomerID>
    <Orders>
      <OrderID>10308</OrderID>
      <CustomerID>ANATR</CustomerID>
      <OrderDate>1996-09-18T00:00:00</OrderDate>
    </Orders>
    <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
  </Customers>
</CustomerOrders>

另請參閱