.Net C # DataTables и DataSets, Как связать таблицы - PullRequest
3 голосов
/ 14 июля 2009

Как вы берете пару таблиц данных и помещаете их в набор данных и связываете их (это даже не звучит как правильный английский)?

Я знаю, как создавать таблицы данных.

Ответы [ 8 ]

9 голосов
/ 14 июля 2009

Вот пример из одного из моих классов

// create the relationship between Booking and Booking_MNI
DataRelation relBookingMNI;                         
relBookingMNI = new DataRelation("BookingToBookingMNI",dsBooking.Tables["Booking"].Columns["Record_Id"],dsBooking.Tables["Booking_MNI"].Columns["booking_record_id"]);
dsBooking.Relations.Add(relBookingMNI);

dsBooking - это мой основной набор данных, который содержит 2 таблицы Booking и Booking_MNI. Где Record_Id является первичным ключом, а booking_record_id является внешним ключом

Я изменил код ниже, чтобы соответствовать моему первому примеру. Но я думаю, это то, что вы ищете. В нашем производственном коде это приведет к появлению символа «+» слева от строки, что позволит вам углубиться в связанную таблицу. Я снова взял рабочий код и сделал его похожим на первый пример, поэтому я не знаю, скомпилируется ли он, но он должен заставить вас двигаться в правильном направлении.

DataTable dtBooking = ds.Tables[0];
DataTable dtBooking_MNI = ds.Tables[1];

dtBooking.PrimaryKey = new DataColumn[] {dtBooking.Columns["Record_Id"]};
dtBooking_MNI.PrimaryKey = new DataColumn[] {dtBooking_MNI.Columns["booking_Record_Id"]};

/* Setup DataRelation between the DataTables */
DataColumn[] dcBookingColsArray = new DataColumn[1] {dtBooking.Columns["Record_Id"]};
DataColumn[] dcBookingMNIColsArray = new DataColumn[1] {dtBooking_MNI.Columns["booking_record_Id"]};

DataRelation relBooking_To_MNI = new DataRelation("Booking_To_MNI",dcBookingColsArray,dcBookingMNIColsArray);
ds.Relations.Add(relBooking_To_MNI_Units);

// grid where you want to display the relationship
grdBooking.DataSource = ds;
3 голосов
/ 14 июля 2009

Посмотрите на класс DataRelation. Это то, что используется в наборе данных для связи двух таблиц данных вместе.

2 голосов
/ 14 июля 2009

Допустим, у вас есть ваши DataTables с именами «orders» и «orderDetails». Вы хотите создать связь между ними по столбцам OrderNumber. Предположим, что orders является родительским, а orderDetails - дочерним. Мы хотим просмотреть заказы, а затем распечатать соответствующие итоги каждого из них.

DataSet orderData = new DataSet("OrderData");

orderData.Tables.Add(orders);
orderData.Tables.Add(orderDetails);

orderData.Relations.Add("Order_OrderDetails", orders.Columns["OrderNumber"], orderDetails.Columns["OrderNumber"]);

Теперь, когда вы хотите использовать эти отношения где-то еще в вашем коде:

DataRelation orderRelation = orderData.Relations["Order_OrderDetails"];

foreach (DataRow order in orders.Rows)
{
   Console.WriteLine("Subtotals for Order {0}:", order["OrderNumber"]);

   foreach (DataRow orderDetail in order.GetChildRows(orderRelation))
   {
      Console.WriteLine("Order Line {0}: {1}", orderDetail["OrderLineNumber"], string.Format("{0:C}", orderDetail["Price"]));
   }
}
1 голос
/ 01 января 2014

попробуйте вот две таблицы 1. категории и 2. продукты

        string query = "SELECT * FROM Categories; SELECT * FROM Products";

        SqlConnection con = new SqlConnection();
        SqlDataAdapter da = new SqlDataAdapter(query,con);
        DataSet ds = new DataSet();
        da.Fill(ds, "CategoriesAndProducts");     //CategoriesAndProducts dataset

        string s = ds.Tables[0].Rows[0]["Name"].ToString();  
        string s1 = ds.Tables[1].Rows[0]["Name"].ToString(); 

        Console.WriteLine(s);  //from categories [0][0] like Electronic
        Console.WriteLine(s1); //from Products  [0][0]  like LG
0 голосов
/ 07 января 2019
private void CreateRelation() 
 {
   // Get the DataColumn objects from two DataTable objects 
   // in a DataSet. Code to get the DataSet not shown here.
   DataColumn parentColumn = 
   DataSet1.Tables["Customers"].Columns["CustID"];
   DataColumn childColumn = 
   DataSet1.Tables["Orders"].Columns["CustID"];
   // Create DataRelation.
   DataRelation relCustOrder;
   relCustOrder = new DataRelation("CustomersOrders", 
   parentColumn, childColumn);
   // Add the relation to the DataSet.
   DataSet1.Relations.Add(relCustOrder);
  }
0 голосов
/ 14 июля 2009

Если вы используете Visual Studio 2005 или более позднюю версию, попробуйте следующее: Щелкните правой кнопкой мыши свой проект и выберите «Добавить / Новый элемент ...», затем выберите DataSet в мастере, который создаст вам xsd и откроет конструктор набора данных. Теперь вы можете создавать несколько таблиц, добавлять столбцы к каждой таблице и рисовать отношения (внешний ключ, с / без каскадирования ...) между этими таблицами. в автоматически сгенерированном [YourNewDataSet} .Designer.cs-файле вы найдете исходный код для этих отношений. Примерно так:

this.relationFK_DataTable2_DataTable1 = new global::System.Data.DataRelation("FK_DataTable2_DataTable1", new global::System.Data.DataColumn[] {
                    this.tableDataTable2.asdfasColumn}, new global::System.Data.DataColumn[] {
                    this.tableDataTable1.asdfaColumn}, false);

Как всегда, вы можете вырезать некоторую часть этого кода, если вы пишете вручную, а не используете конструктор.

0 голосов
/ 14 июля 2009

Возможно, вы ищете решение orm , например Entity Framework , NHibernate или Linq to SQL ?

Извинения, если я неправильно понял вопрос.

0 голосов
/ 14 июля 2009
...