Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Em uma representação relacional de dados, tabelas individuais contêm linhas que estão relacionadas entre si usando uma coluna ou um conjunto de colunas. No ADO.NET DataSet, a relação entre tabelas é implementada usando um DataRelation. Quando você cria um DataRelation, as relações pai-filho das colunas são gerenciadas somente por meio da relação. As tabelas e colunas são entidades separadas. Na representação hierárquica de dados que o XML fornece, as relações pai-filho são representadas por elementos pai que contêm elementos filho aninhados.
Para facilitar o aninhamento de objetos filhos quando um DataSet está sincronizado com um XmlDataDocument ou escrito como dados XML usando WriteXml, DataRelation expõe uma propriedade Nested. Definir a Nested propriedade da DataRelation para true faz com que as linhas filhas da relação sejam aninhadas na coluna pai quando escritas como dados XML ou sincronizadas com um XmlDataDocument. A Nested propriedade do DataRelation é falsa, por defeito.
Por exemplo, considere o seguinte 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"]);
Como a Nested propriedade do DataRelation objeto não está definida como true para este DataSet, os objetos filhos não são aninhados dentro dos elementos pais quando estes DataSet são representados como dados XML. A transformação da representação XML de um DataSet que contém DataSets relacionados com relações de dados não aninhadas pode resultar em baixo desempenho. Recomendamos que você aninhe as relações de dados. Para isso, defina a Nested propriedade como verdadeira. Em seguida, escreva o código na folha de estilos XSLT que usa expressões de consulta XPath hierárquicas de cima para baixo para localizar e transformar os dados.
O exemplo de código seguinte mostra o resultado da chamada WriteXml ao 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>
Note que o Customers elemento e os Orders elementos são mostrados como elementos irmãos. Se quiser que os Orders elementos apareçam como filhos dos respetivos elementos progenitores, a Nested propriedade de o DataRelation teria de ser definida como true e acrescentaria o seguinte:
customerOrders.Nested = True
customerOrders.Nested = true;
O código seguinte mostra como seria a saída resultante, com os Orders elementos aninhados dentro dos respetivos elementos progenitores.
<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>