//设置连接字符串
string connectString ="server=.;password=;uid=sa;database=Northwind";
SqlConnection sqlConnection=new SqlConnection(connectString);
sqlConnection.Open(); 

// 打开适配器
string cmdText ="SELECT CustomerID,CompanyName FROM Customers ";
SqlDataAdapter sqlDataAdapter =new SqlDataAdapter(cmdText,sqlConnection); 
DataSet dataSet=new DataSet();
sqlDataAdapter.Fill(dataSet,"Customers"); cmdText ="SELECT CustomerID,OrderID FROM Orders ";
sqlDataAdapter =new SqlDataAdapter(cmdText,sqlConnection); 
sqlDataAdapter.Fill(dataSet,"Orders");// 连接2个表
DataRelation dataRelation = dataSet.Relations.Add("CustomersOrders",dataSet.Tables["Customers"].Columns["CustomerID"],
dataSet.Tables["Orders"].Columns["CustomerID"]);
            
foreach(DataRow customerDataRow in dataSet.Tables["Customers"].Rows )
{
// 这里可以+判断条件筛选
Console.WriteLine("CustomerID:" + customerDataRow["CustomerID"].ToString() + "    CompanyName:" + customerDataRow["CompanyName"].ToString());
foreach(DataRow ordersDataRow in customerDataRow.GetChildRows(dataRelation) )
{
// 这里可以+判断条件筛选
Console.WriteLine("CustomerID:"+ ordersDataRow["CustomerID"].ToString() + "   OrderID:" + ordersDataRow["OrderID"].ToString()); 
}
}

解决方案 »

  1.   

    //****你可以用一个存储过来进行处理哈
    create proc prc_system_filter
    (
       @SQLEx varcvhar(3000);
    )
    as
      declare @strSQL varchar(2000);  set @strSQL='select * from table1 inner join tabl2 on tabl1.id=table2.id inner join
                   table3 on table2.id=table3.id  where (1>0)'; if(@SQLEx<>'' and rtrim(ltrim(@SQLEx))<>'')
       set @strSQL=@strSQL+@SQLEx;
     endif  exec(@strSQL);
      

  2.   

    呵呵,看来遇到类似问题的朋友还是很多的。
    请看 www.xproer.com/bbs 
    左边树型目录导航--"技术交流区"--".NET开发技术"--"DataRepeater利用DataRelation显示主从表信息(可控制从表信息隐藏和显示).(DataRepeater嵌套)"文章
      

  3.   

    ds.Relations.Add("r1", ds.Tables[0].Columns["UserID"], ds.Tables[1].Columns["UserId"]);
            ds.Relations.Add("r2", ds.Tables[1].Columns["ClassID"], ds.Tables[1].Columns["ClassID"]);        //查询        DataView dv = ds.Tables[0].DefaultView;
           
            for (int i = 0; i < dv.Count;i++)
            {           DataView dv1  = dv[i].CreateChildView("r1");
               for (int j = 0; j > dv1.Count; j++)
               {
                   DataView dv2 = dv1[i].CreateChildView("r2");
               }           
            }
      

  4.   

    用双重inner join吧,楼上 zhangxiaopin(zxp) 已经给出完整SQL了。