dt1 字段 a ,b,c,d,e dt2字段 m,n,p如果d=m and e=n 那么p就作为dt1的一个字段p 组后要的dt3就是 a,b,c,d,e,p
解决方案 »
- FormClosing 中 timer没有启动
- 怎么获取一个网址的 原网址啊?
- 这段代码删除数据库记录 求教
- 为什么调用FindWindow()报错
- 如何把数据库的数据读到 XML中,显示相应的xml格式?
- VS2005中我把控件定义成静态的,每次修改一些数据口,它都会自动变回非静态的,如何解决?
- 每个窗里互相调用
- 散分讨论:C#实现文本到数据库的导入问题
- 生成DLL或者是COM???
- C#中如何取得像资源管理器的树状列表?要有图标的,就是和资源浏览器的左边一摸一样,怎么做?
- 如果客户端是c#做的桌面程序,他和服务器如何维护Session?
- 请问大家,在datagrid中直接修改了数据之后,怎么将修改后的结果保存到数据库中并在DataGrid中显示
#region Using directivesusing System;
using System.Data; // Use ADO.NET namespace
using System.Data.SqlClient; // Use SQL Server data provider namespace
using System.Collections.Generic;
using System.Text;#endregionnamespace ManyRelations
{
class Program
{
static void Main(string[] args)
{
// Specify SQL Server-specific connection string SqlConnection thisConnection = new SqlConnection(@"Data Source=HUI\SQLSERVER;Initial Catalog=Northwind;Integrated Security=True"); DataSet thisDataSet = new DataSet();
SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers", thisConnection);
custAdapter.Fill(thisDataSet, "Customers"); SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders", thisConnection);
orderAdapter.Fill(thisDataSet, "Orders"); SqlDataAdapter detailAdapter = new SqlDataAdapter("SELECT * FROM [Order Details]", thisConnection);
detailAdapter.Fill(thisDataSet, "Order Details"); SqlDataAdapter prodAdapter = new SqlDataAdapter("SELECT * FROM Products", thisConnection);
prodAdapter.Fill(thisDataSet, "Products"); //创建DataRelation对象
DataRelation custOrderRel = thisDataSet.Relations.Add("CustOrders",
thisDataSet.Tables["Customers"].Columns["CustomerID"],
thisDataSet.Tables["Orders"].Columns["CustomerID"]); DataRelation orderDetailRel = thisDataSet.Relations.Add("OrderDetail",
thisDataSet.Tables["Orders"].Columns["OrderID"],
thisDataSet.Tables["Order Details"].Columns["OrderID"]); DataRelation orderProductRel = thisDataSet.Relations.Add(
"OrderProducts", thisDataSet.Tables["Products"].Columns["ProductID"],
thisDataSet.Tables["Order Details"].Columns["ProductID"]); //此处Products是父表 foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows)
{
Console.WriteLine("Customer ID: " + custRow["CustomerID"]); foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel)) //提取子行
{
Console.WriteLine("\tOrder ID: " + orderRow["OrderID"]);
Console.WriteLine("\tOrder Date: " + orderRow["OrderDate"]); foreach (DataRow detailRow in
orderRow.GetChildRows(orderDetailRel))
{
Console.WriteLine("\t\tProduct: " +
detailRow.GetParentRow(orderProductRel)["ProductName"]); //从"多端"进入"一端",获取父对象
Console.WriteLine("\t\tQuantity: " + detailRow["Quantity"]);
}
}
}
thisConnection.Close();
Console.Write("Program finished, press Enter/Return to continue:");
Console.ReadLine();
}
}
}
dt1 = new DataTable();
dt2 = new DataTable();
dt1.Columns.Add(new DataColumn("a"));
dt1.Columns.Add(new DataColumn("b"));
dt1.Columns.Add(new DataColumn("c"));
dt1.Columns.Add(new DataColumn("d"));
dt1.Columns.Add(new DataColumn("e"));
dt2.Columns.Add(new DataColumn("m"));
dt2.Columns.Add(new DataColumn("n"));
dt2.Columns.Add(new DataColumn("p")); dt3 = dt1.Clone();
dt3.Columns.Add(new DataColumn("p")); for (int i = 0; i < 10; i++)
{
DataRow row = dt1.NewRow();
foreach (DataColumn col in dt1.Columns)
{
row[col] = i.ToString();
}
dt1.Rows.Add(row);
} for (int i = 5; i < 10; i++)
{
DataRow row = dt2.NewRow();
foreach (DataColumn col in dt2.Columns)
{
row[col] = i;
}
dt2.Rows.Add(row);
}
foreach (DataRow row in dt1.Rows)
{
DataRow[] t = dt2.Select("m='" +row["d"]+"' and n='" + row["e"]+"'");//找到相同的行
foreach (DataRow r in t)
{
DataRow r3 = dt3.NewRow();
r3["a"] = row["a"];
r3["b"] = row["b"];
r3["c"] = row["c"];
r3["d"] = row["d"];
r3["e"] = row["e"];
r3["p"]=r["p"];
dt3.Rows.Add(r3); } } foreach (DataRow r in dt3.Rows)
{
foreach (DataColumn c in dt3.Columns)
{
Console.Write(r[c]);
Console.Write("...");
}
Console.WriteLine();
}
d,e两列设置为主键列