存储过程返回多个表,填充到Dataset中后,现在Dataset中有多个表我在Dataset中取表的时候,是不是只能按照索引来取?
例如ds.Tables[0],ds.Tables[1],,,,,
问题是,如果存储过程中我又多返回了一个表,并且位置都变化了
那我这边再按照索引来取是不是就乱了有没有什么办法,在我填充DataSet的时候,直接按定义的表名来取?
目前Dataset中存的表名都是默认的Table0 ,Table1等等,,没用

解决方案 »

  1.   

    Fill(ds,"A")??????这个A是对应存储过程中那个表的?
    存储过程中返回可能有三个表
      

  2.   

    各位大侠好好读一下题啊存储过程返回三个表 A B C加载到数据集里就变成 Ds.Table[0]  Ds.Table[1] Ds.Table[2]我现在想用A表 我就得使用Ds.Table[0]问题是,如果存储过程中增加了一个返回表,并且顺序变了 D A B C
    而我应用程序这边不知道存储过程中的顺序的变化
    仍然使用Ds.Table[0],而此时Ds.Table[0]已经是D表 而不是A表了,,,,
      

  3.   

    不是有按表名选表的重载版本么
    Ds.Tables["A"]
      

  4.   


    感谢兄弟你认真的看完我的陈述,唉,,,我就是想按照表名来取表,但是这样的话存储过程里是不是得处理一下
    例如表A 是这样得到的 
    select * from XX1
    Inner join XX2,,,
    Left Outer Join XX3,,,
    Where XXXXXXXXXXX and XXXXXX这样的话肯定不会自动添加Dataset的时候绑定表名A是不是得这样处理?
    select * from (
                    select * from XX1
                    Inner join XX2,,,
                    Left Outer Join XX3,,,
                    Where XXXXXXXXXXX and XXXXXX
                    ) AS A这样是不是太麻烦了?
      

  5.   

    楼主,不知道你是否已经搞定,给你一个可以不用默认表名的方法,你参考。使用DataTableMapping类:
    DataTableMapping mapping = adapter.TableMappings.Add("Table0", "abc");
    adapter.Fill(dataset);
    有几个表你就添加几个mapping就行了。