Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В реляционном представлении данных отдельные таблицы содержат строки, связанные друг с другом, с помощью столбца или набора столбцов. В ADO.NET DataSetсвязь между таблицами реализуется с помощью DataRelation. При создании DataRelation отношения между родительскими и дочерними столбцами управляются только через отношение. Таблицы и столбцы являются отдельными сущностями. В иерархическом представлении данных, предоставляемых XML, отношения родительского-дочернего элемента представлены родительскими элементами, содержащими вложенные дочерние элементы.
Чтобы упростить вложение дочерних объектов, когда DataSet синхронизирован с XmlDataDocument или данные записываются как XML с использованием WriteXml, DataRelation предоставляет свойство Nested.
Nested Установка свойства DataRelation в true приводит к тому, что дочерние строки связи оказываются вложенными в родительском столбце при записи в виде XML-данных или синхронизации с XmlDataDocument. Свойство NestedDataRelation имеет значение false, по умолчанию.
Например, рассмотрим следующий набор данных.
' 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"]);
Nested Так как свойство DataRelation объекта не задано true для этого набора данных, дочерние объекты не вложены в родительские элементы, когда они DataSet представлены как XML-данные. Преобразование 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 появились как дочерние элементы их соответствующих родительских элементов, следует задать свойство Nested для DataRelation на 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>