DataRelations’ı İç İçe Yerleştirme
Verilerin ilişkisel gösteriminde, tek tek tablolar bir sütun veya sütun kümesi kullanılarak birbiriyle ilişkili satırlar içerir. ADO.NET DataSettablo arasındaki ilişki kullanılarak DataRelationuygulanır. DataRelation oluşturduğunuzda, sütunların üst-alt ilişkileri yalnızca ilişki aracılığıyla yönetilir. Tablolar ve sütunlar ayrı varlıklardır. XML'nin sağladığı verilerin hiyerarşik gösteriminde, üst-alt ilişkiler iç içe alt öğeler içeren üst öğelerle temsil edilir.
DataSet, WriteXml kullanılarak XML XmlDataDocument verileriyle eşitlendiğinde veya yazıldığında alt nesnelerin iç içe taşınmasını kolaylaştırmak için DataRelation bir İç İçe özelliğini kullanıma sunar. DataRelation'ın Nested özelliğini true olarak ayarlamak, XML verileri olarak yazıldığında veya xmlDataDocument ile eşitlendiğinde ilişkinin alt satırlarının üst sütun içinde iç içe olmasına neden olur. DataRelation'ın nested özelliği varsayılan olarak false'tur.
Örneğin, aşağıdaki DataSet'i göz önünde bulundurun.
' 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"]);
DataRelation nesnesinin Nested özelliği bu DataSet için true olarak ayarlanmadığından, bu DataSet XML verileri olarak temsil edildiğinde alt nesneler üst öğelerin içinde iç içe yerleştirilmemiştir. İç içe olmayan veri ilişkileriyle ilgili DataSet'leri içeren bir DataSet'inXML gösteriminin dönüştürülmesi performansın yavaş olmasına neden olabilir. Veri ilişkilerini iç içe yerleştirmenizi öneririz. Bunu yapmak için İç İçe özelliğini true olarak ayarlayın. Ardından, verileri bulmak ve dönüştürmek için yukarıdan aşağıya hiyerarşik XPath sorgu ifadelerini kullanan XSLT stil sayfasına kod yazın.
Aşağıdaki kod örneği, DataSet üzerinde WriteXml çağrısının sonucunu gösterir.
<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 öğesinin ve Orders öğelerinin eşdüzey öğeler olarak gösterildiğini unutmayın. Orders öğelerinin ilgili üst öğelerinin alt öğeleri olarak gösterilmesini istiyorsanız DataRelation'ın nested özelliğinin true olarak ayarlanması gerekir ve aşağıdakileri eklersiniz:
customerOrders.Nested = True
customerOrders.Nested = true;
Aşağıdaki kod, Siparişler öğelerinin ilgili üst öğeleri içinde iç içe yerleştirilmiş şekilde elde edilen çıkışın nasıl görüneceğini gösterir.
<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>