【发布时间】:2010-11-10 10:58:50
【问题描述】:
您如何获取几个数据表并将它们放入数据集中并关联(这听起来甚至不像正确的英语)?
我知道如何创建数据表。
【问题讨论】:
您如何获取几个数据表并将它们放入数据集中并关联(这听起来甚至不像正确的英语)?
我知道如何创建数据表。
【问题讨论】:
【讨论】:
查看 DataRelation 类。它是在 DataSet 中用来将两个 DataTable 关联在一起的。
【讨论】:
也许您正在寻找orm 解决方案,例如Entity Framework、NHibernate 或Linq to SQL?
抱歉,如果我误解了这个问题。
【讨论】:
这是我的一门课的一个例子
// 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;
【讨论】:
如果您使用 Visual Studio 2005 或更高版本,请尝试以下操作: 右键单击您的项目并选择“Add/NewItem...”,然后从向导中选择 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);
与往常一样,如果您手动编写代码而不是使用设计器,您可以删除该代码的相当一部分。
【讨论】:
假设您的数据表名为“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. 类别和 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
【讨论】:
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);
}
【讨论】: