共用方式為


巢狀 DataRelation

關聯式資料表示中,個別資料表所包含的資料列使用一個或一組資料行彼此關聯。在 ADO.NET DataSet 中,是使用 DataRelation 來實作資料表間的關聯性。當您建立 DataRelation 時,資料行的父子關係只透過這項關聯來管理,而資料表和資料行是個別的實體。XML 提供的階層式資料表示中,父子關係是由包含巢狀項目子系的父項目表示。

DataSetXmlDataDocument 同步時,或使用 WriteXml 撰寫為 XML,若要加速子物件的巢狀,DataRelation 會公開 Nested 屬性。將 DataRelationNested 屬性設定為 true,會造成關聯的子資料列在寫為 XML 資料或與 XmlDataDocument 同步處理時,巢狀化至父資料行中。依預設,DataRelationNested 屬性為 false

例如,請考量下列 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"]);

由於在這個 DataSet 中,DataRelation 物件的 Nested 屬性並未設定為 true,所以將這個 DataSet 表示為 XML 資料時,子物件不會巢狀化至父項目內。

下列程式碼範例顯示在 DataSet 呼叫 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 項目顯示為其個別父項目的項目子系,則您必須將 DataRelationNested 屬性設定為 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>

請參閱

概念

在資料表間加入關聯性

其他資源

在 DataSet 中使用 XML
使用 ADO.NET 中的 DataSets