Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans une représentation relationnelle des données, les tables individuelles contiennent des lignes qui sont liées les unes aux autres à l’aide d’une colonne ou d’un ensemble de colonnes. Dans le ADO.NET DataSet, la relation entre les tables est implémentée à l’aide d’un DataRelation. Lorsque vous créez un DataRelation, les relations parent-enfant des colonnes sont gérées uniquement par le biais de la relation. Les tables et colonnes sont des entités distinctes. Dans la représentation hiérarchique des données que XML fournit, les relations parent-enfant sont représentées par des éléments parents qui contiennent des éléments enfants imbriqués.
Pour faciliter l’imbrication des objets enfants lorsqu’un DataSet est synchronisé avec un XmlDataDocument ou écrit en tant que données XML à l’aide de WriteXml, le DataRelation expose une propriété Nested. La définition de la propriété Nested d’un DataRelation à true provoque l’imbrication des lignes enfants de la relation dans la colonne parente lorsqu'ils sont écrits en XML ou synchronisés avec un XmlDataDocument. La Nested propriété de la DataRelation est par défaut false.
Par exemple, considérez le DataSet suivant.
' 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"]);
Étant donné que la Nested propriété de l’objet DataRelation n’est pas définie true pour ce DataSet, les objets enfants ne sont pas imbriqués dans les éléments parents lorsqu’ils DataSet sont représentés en tant que données XML. La transformation de la représentation XML d’un DataSetDataSet associé avec des relations de données non imbriquées peut ralentir les performances. Il est recommandé d'imbriquer les relations de données. Pour ce faire, définissez la Nested propriété sur true. Écrivez ensuite du code dans la feuille de style XSLT qui utilise des expressions de requête XPath hiérarchiques supérieures pour localiser et transformer les données.
L’exemple de code suivant montre le résultat de l’appel WriteXml sur le DataSet.
<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>
Notez que l’élément Customers et les Orders éléments sont affichés en tant qu’éléments frères. Si vous souhaitez que les Orders éléments s’affichent en tant qu’enfants de leurs éléments parents respectifs, la propriété Nested de l’élément DataRelation doit être définie sur true et vous devez ajouter les éléments suivants :
customerOrders.Nested = True
customerOrders.Nested = true;
Le code suivant montre à quoi ressemblerait la sortie résultante, avec les Orders éléments imbriqués dans leurs éléments parents respectifs.
<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>