Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
DataRelation birincil işlevlerinden biri, bir DataTable içinde bir DataSet'den diğerine gezinmeyi sağlamaktır. Bu, ilgili bir DataRow'den tek bir DataTable verildiğinde, tüm ilgili DataRow nesneleri tek bir içinde almanıza olanak tanır. Örneğin, bir müşteri tablosuyla sipariş tablosu arasında bir ilişki kurduktan sonra, belirli bir müşteri satırının tüm sipariş satırlarını DataRelation kullanarak alabilirsiniz.
Aşağıdaki kod örneği, bir DataRelation, Customers ve Orders tabloları arasında bir DataSet oluşturur ve her müşteri için tüm siparişleri döndürür.
DataRelation customerOrdersRelation =
customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow custRow in customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine(custRow["CustomerID"].ToString());
foreach (DataRow orderRow in custRow.GetChildRows(customerOrdersRelation))
{
Console.WriteLine(orderRow["OrderID"].ToString());
}
}
Dim customerOrdersRelation As DataRelation = _
customerOrders.Relations.Add("CustOrders", _
customerOrders.Tables("Customers").Columns("CustomerID"), _
customerOrders.Tables("Orders").Columns("CustomerID"))
Dim custRow, orderRow As DataRow
For Each custRow In customerOrders.Tables("Customers").Rows
Console.WriteLine("Customer ID:" & custRow("CustomerID").ToString())
For Each orderRow In custRow.GetChildRows(customerOrdersRelation)
Console.WriteLine(orderRow("OrderID").ToString())
Next
Next
Sonraki örnek, önceki örneği temel alarak dört tabloyu birbirine bağlar ve bu ilişkilerde gezinir. Önceki örnekte olduğu gibi, CustomerIDCustomers tablosunu Orders tablosuyla ilişkilendirmektedir.
Customers tablosundaki her müşteri için, belirli bir müşterinin sipariş sayısını ve Orders değerlerini döndürmek amacıyla OrderID tablosundaki tüm alt satırlar belirlenir.
Genişletilmiş örnek, OrderDetails ve Products tablolarındaki değerleri de döndürür. TabloOrders, her müşteri siparişi için hangi ürünlerin ve miktarların sipariş verildiğini belirlemek için kullanılan OrderDetails tabloyla ilgilidirOrderID.
OrderDetails Tablo yalnızca sipariş edilen bir ürünle ilgili ProductID içerdiğinden, OrderDetails öğesi, Products kullanılarak ProductID ile ilişkilidir ve ProductName değerini döndürür. Bu ilişkide Products tablosu ebeveyn tablo, Sipariş Ayrıntıları tablosu ise alt tablodur. Sonuç olarak, OrderDetails tablosu üzerinde döngü yapılırken, ilgili GetParentRow değerini almak için ProductName çağrılır.
DataRelation ve Customers tabloları için Orders oluşturulduğunda, createConstraints bayrağı için hiçbir değer belirtilmemiştir (varsayılan değer true olarak kalmaktadır). Bu, tablodaki Orders tüm satırların üst CustomerID tabloda bulunan bir Customers değere sahip olduğunu varsayar. tabloda mevcut olmayan CustomerID bir Orders varsaCustomers, bir ForeignKeyConstraint özel durum oluşturulur.
Alt sütunun üst sütunda olmayan değerler içerebileceği durumlarda, createConstraints eklerken, false bayrağını düzeyinde ayarlayın. Örnekte, createConstraints bayrağı, false tablo ile DataRelation tablo arasındaki Orders için OrderDetails olarak ayarlanır. Bu, uygulamanın çalışma zamanı özel durumu oluşturmadan tablodaki OrderDetails tüm kayıtları ve tablodaki kayıtların Orders yalnızca bir alt kümesini döndürmesini sağlar. Genişletilmiş örnek aşağıdaki biçimde çıkış oluşturur.
Customer ID: NORTS
Order ID: 10517
Order Date: 4/24/1997 12:00:00 AM
Product: Filo Mix
Quantity: 6
Product: Raclette Courdavault
Quantity: 4
Product: Outback Lager
Quantity: 6
Order ID: 11057
Order Date: 4/29/1998 12:00:00 AM
Product: Outback Lager
Quantity: 3
Aşağıdaki kod örneği, ve OrderDetails tablolarındaki Products değerlerin döndürüldüğü genişletilmiş bir örnektir ve tablodaki Orders kayıtların yalnızca bir alt kümesi döndürülür.
DataRelation customerOrdersRelation =
customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);
DataRelation orderDetailRelation =
customerOrders.Relations.Add("OrderDetail",
customerOrders.Tables["Orders"].Columns["OrderID"],
customerOrders.Tables["OrderDetails"].Columns["OrderID"], false);
DataRelation orderProductRelation =
customerOrders.Relations.Add("OrderProducts",
customerOrders.Tables["Products"].Columns["ProductID"],
customerOrders.Tables["OrderDetails"].Columns["ProductID"]);
foreach (DataRow custRow in customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine("Customer ID: " + custRow["CustomerID"]);
foreach (DataRow orderRow in custRow.GetChildRows(customerOrdersRelation))
{
Console.WriteLine(" Order ID: " + orderRow["OrderID"]);
Console.WriteLine("\tOrder Date: " + orderRow["OrderDate"]);
foreach (DataRow detailRow in orderRow.GetChildRows(orderDetailRelation))
{
Console.WriteLine("\t Product: " +
detailRow.GetParentRow(orderProductRelation)["ProductName"]);
Console.WriteLine("\t Quantity: " + detailRow["Quantity"]);
}
}
}
Dim customerOrdersRelation As DataRelation = _
customerOrders.Relations.Add("CustOrders", _
customerOrders.Tables("Customers").Columns("CustomerID"), _
customerOrders.Tables("Orders").Columns("CustomerID"))
Dim orderDetailRelation As DataRelation = _
customerOrders.Relations.Add("OrderDetail", _
customerOrders.Tables("Orders").Columns("OrderID"), _
customerOrders.Tables("OrderDetails").Columns("OrderID"), False)
Dim orderProductRelation As DataRelation = _
customerOrders.Relations.Add("OrderProducts", _
customerOrders.Tables("Products").Columns("ProductID"), _
customerOrders.Tables("OrderDetails").Columns("ProductID"))
Dim custRow, orderRow, detailRow As DataRow
For Each custRow In customerOrders.Tables("Customers").Rows
Console.WriteLine("Customer ID:" & custRow("CustomerID").ToString())
For Each orderRow In custRow.GetChildRows(customerOrdersRelation)
Console.WriteLine(" Order ID: " & orderRow("OrderID").ToString())
Console.WriteLine(vbTab & "Order Date: " & _
orderRow("OrderDate").ToString())
For Each detailRow In orderRow.GetChildRows(orderDetailRelation)
Console.WriteLine(vbTab & " Product: " & _
detailRow.GetParentRow(orderProductRelation) _
("ProductName").ToString())
Console.WriteLine(vbTab & " Quantity: " & _
detailRow("Quantity").ToString())
Next
Next
Next