Freigeben über


Geschachtelte DataRelations

Bei einer relationalen Darstellung von Daten enthalten einzelne Tabellen Zeilen, die über eine Spalte oder eine Gruppe von Spalten einander zugeordnet sind. Im ADO.NET-DataSet wird die Beziehung zwischen Tabellen mit einer DataRelation implementiert. Beim Erstellen einer DataRelation werden die Beziehungen zwischen übergeordneten und untergeordneten Spalten nur über die Beziehung verwaltet. Die Tabellen und Spalten sind separate Entitäten. Bei der hierarchischen Darstellung von durch XML bereitgestellten Daten werden die hierarchischen Beziehungen durch übergeordnete Elemente dargestellt, die geschachtelte untergeordnete Elemente enthalten. Die DataRelation stellt eine Nested-Eigenschaft zur Verfügung, um die Schachtelung von untergeordneten Objekten zu vereinfachen, wenn ein DataSet mit einem XmlDataDocument synchronisiert oder mit WriteXml als XML-Daten geschrieben wird. Wenn Sie die Nested-Eigenschaft einer DataRelation auf True festlegen, werden die untergeordneten Zeilen innerhalb der übergeordneten Spalte geschachtelt, wenn die Daten als XML-Daten geschrieben oder mit einem XmlDataDocument synchronisiert werden. Standardmäßig ist die Nested-Eigenschaft einer DataRelation auf False festgelegt. Nehmen Sie folgendes DataSet als Beispiel:

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;" & _
                                            "Integrated Security=SSPI;Initial Catalog=Northwind;")
Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn)
Dim orderDA As SqlDataAdapter = New SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate FROM Orders", nwindConn)

nwindConn.Open()

Dim custDS As DataSet = New DataSet("CustomerOrders")
custDA.Fill(custDS, "Customers")
orderDA.Fill(custDS, "Orders")

nwindConn.Close()

Dim custOrderRel As DataRelation = custDS.Relations.Add("CustOrders",
                     custDS.Tables("Customers").Columns("CustomerID"),
                     custDS.Tables("Orders").Columns("CustomerID"))
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;" +
                                            "Integrated Security=SSPI;Initial Catalog=Northwind;");
SqlDataAdapter custDA = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn);
SqlDataAdapter orderDA = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate FROM Orders", nwindConn);

nwindConn.Open();

DataSet custDS = new DataSet("CustomerOrders");
custDA.Fill(custDS, "Customers");
orderDA.Fill(custDS, "Orders");

nwindConn.Close();

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

Da die Nested-Eigenschaft des DataRelation-Objekts für dieses DataSet nicht auf True festgelegt ist, werden die untergeordneten Objekte nicht innerhalb der übergeordneten Elemente geschachtelt, wenn dieses DataSet als XML-Daten dargestellt wird.

Das folgende Codebeispiel zeigt die Ausgabe, die aus dem Aufruf von WriteXml für das DataSet resultiert.

<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>

Beachten Sie, dass das Customers-Element und das Orders-Element als gleichwertige Elemente dargestellt werden. Wenn die Orders-Elemente als untergeordnete Elemente der entsprechenden übergeordneten Elemente dargestellt werden sollen, müsste für die Nested-Eigenschaft der DataRelation der Wert True angegeben werden, und Sie müssten folgenden Code hinzufügen:

custOrderRel.Nested = True
[C#]
custOrderRel.Nested = true;

Der folgende Code zeigt, wie die Ausgabe aussehen könnte, wenn die Orders-Elemente innerhalb ihrer zugehörigen übergeordneten Elemente geschachtelt sind.

<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>

Siehe auch

XML und das DataSet | Hinzufügen einer Beziehung zwischen Tabellen | Erstellen und Verwenden von DataSets