如何将几个数据表放在一个数据集中并将它们联系起来(甚至听起来不像是正确的英语)呢?
我知道如何创建数据表。
答案 0 :(得分:9)
以下是我的一个班级
的示例// 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;
答案 1 :(得分:3)
查看DataRelation类。它是DataSet中用于将两个DataTable相关联的内容。
答案 2 :(得分:2)
假设您的DataTables名为“orders”和“orderDetails”。您希望通过OrderNumber列在它们之间创建关系。我们假设订单是父订单,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"]));
}
}
答案 3 :(得分:1)
这里尝试这是两个表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
答案 4 :(得分:0)
答案 5 :(得分:0)
也许您正在寻找orm,Entity Framework或NHibernate等Linq to SQL解决方案?
如果我误解了这个问题,请注意。
答案 6 :(得分:0)
如果您使用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);
如果你手动编码而不是使用设计师,你可以像往常一样剥离这部分代码。
答案 7 :(得分:0)
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);
}