DataSet多表关联实现本地数据复杂的查询

Code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt            DataSet ds = new DataSet();

            
//提取第一个表 放在ds中
            dp.CommandText = "SELECT * FROM ss_RolesInAction";
            ds.Tables.Add(dp.ExecuteDataTable(
"ss_RolesInAction"));

            
//提取第二个表 放在ds中
            dp.CommandText = "SELECT * FROM ss_Action";
            ds.Tables.Add(dp.ExecuteDataTable(
"ss_Action"));

            
//提取第三个表 放在ds中
            dp.CommandText = "SELECT * FROM as_SiteMap";
            ds.Tables.Add(dp.ExecuteDataTable(
"as_SiteMap"));

            
//建立关系 ss_Action.FID = ss_RolesInAction.FActionID ,ss_RolesInAction.FActionID为外键
            ds.Relations.Add("relation1", ds.Tables[1].Columns["FID"], ds.Tables[0].Columns["FActionID"]);
            
//建立关系 as_SiteMap.ID = ss_RolesInAction.FNodeID ,ss_RolesInAction.FNodeID 为外键
            ds.Relations.Add("relation2", ds.Tables[2].Columns["ID"], ds.Tables[0].Columns["FNodeID"]);

            
            
//查询条件测试1:对父表查询获取子表测试 
            
//条件为 ss_Action.FID 等于 6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2 的或是 ss_RolesInAction.FActionID 等于 DB893F4E-B411-4FC0-9735-D5E9B7823083 或是 as_SiteMap.id 等于7的
            
//因为已经建立三个表的关系,所以,无论查询条件是什么 都会跟上 关系中的条件 即:
            
//ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID
            
//当我们指定的查询条件为空时会 根据 关联关系查询 以下条件中的 完整关联关系是这样的
            
//(ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID ) and ss_Action.FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or ss_RolesInAction.FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or as_SiteMap.id=7
            DataView dv = ds.Tables[0].DefaultView;
            dv.RowFilter 
= "parent(relation1).FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or parent(relation2).id=7";

            
//查询条件测试2:对子表查询获取父表测试 
            
//因为子表与父表是 多对一 的关系所以 我们对子表查询时 会返回多个值所以 使用 MAX 函数
            DataView dv = ds.Tables[1].DefaultView;
            dv.RowFilter 
= "max(child(relation1).FActionID) in ('FFD953C4-0920-4558-B87F-3A25CFB15754','FC5C91F5-45ED-4B3E-8E14-C2391B9A6B14') ";//这个查询条件中无法关联 as_SiteMap查询条件 因为没有 查询表 as_SiteMap和返回表 ss_Action 的条件

            
this.GridView1.DataSource = dv;
            
this.GridView1.DataBind();

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-557573/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-557573/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值