这是一个分页的存储过程,生成三个表,而数据集中的呈现表是第三个表,请问如何做呢?我是想在存储过程中返回第三个表,请问怎么做?

解决方案 »

  1.   

    如果执行存储过程返回是个Dataset..是这样的Ds.Tables[i];
    i是从零开始的.0是第一个表.1是第二个表.2是第三个表.一次类推
      

  2.   

    在DataSet里面是分表存放的,你到时候取第三个表的数据就可以了就像楼上说的
      

  3.   

    存储过程如下:
    分页的存储过程:
    --用法:
    -- EXEC GetRecordPage 'SELECT * FROM TAB WHERE ...... ',10,100
    CREATE PROC GetRecordPage
    @strSQL varchar(4000), --查询SQL语句字符串
    @CurPageNum int=1, --要显示的第N页
    @PageSize int=50 --每页行数
    AS
    SET NOCOUNT ON
    DECLARE @P1 int, --P1是游标的id
    @RowCount int,
    @PageCount int,
    @CurPage int
    EXEC sp_cursoropen @P1 OUTPUT,@strSQL,@scrollopt=1,@ccopt=1,@RowCount=@RowCount OUTPUT
    SET  @PageCount = ceiling(1.0*@RowCount/@PageSize)
    IF @CurPageNum>@PageCount
    SET @CurPage = @PageCount
    ELSE IF @CurPageNum<=0
    SET @CurPage = 1
    ELSE
    SET @CurPage = @CurPageNum
    SELECT @RowCount AS RsCount,@PageCount AS PageCount,@CurPage AS CurPage
    SET  @CurPageNum=(@CurPageNum-1)*@PageSize+1
    EXEC sp_cursorfetch @P1,16,@CurPageNum,@PageSize
    EXEC sp_cursorclose @P1
    --SET NOCOUNT OFF
    GO
    这个是执行的存储过程:exec GetRecordPage 'SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage, 
          Article.TitleImage_Height, Article.TitleImage_Width, Article.Content, 
          Article.recommend, Article.Comment, Article.Author, Article.FromWhere, 
          Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource, 
          Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend, 
          Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate, 
          Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
    FROM Article INNER JOIN
          MsgClass ON Article.Class_ID = MsgClass.Class_ID LEFT OUTER JOIN
          IZ_User ON Article.User_ID = IZ_User.UserID
    WHERE Article.ArtStatus=1 AND Article.Class_ID=77 ORDER BY Article.IsAllwaysOnTop DESC, Article.ReleaseDate DESC'
    ,1,55
    然后我希望在数据集中看到数据,可是数据为空,在查询分析器上执行的结果为三个表,只有第三个表才是我想要的,怎么做呢?
      

  4.   

    1 如果前两个表不用的话,就在存储过程中去掉那两个 select 语句.2.如果其他地方要用的话,先用DataSet填充.然后  DataTable dt = ds.Tables[2];
      

  5.   

    用dataset取出数据,读取的时候dataset.table[2]
      

  6.   

    是这样的,我是用视图的数据集,就是生成的xsd的视图,2.0所特有的视图。我直接添加TableAdapter进去的
      

  7.   

    哈哈.你要SQL里面嘛?我譵SQl里面不很熟悉.
    你可以在写个存储过程调用,传递参数exec 存储过程名字  i当设置i的值.用if语句完成.把查询数据给新建的存储过程的临时表.这个临时表就是你要东西了.
      

  8.   

    一般原来我们用三层的话,就是用代码写,如前面所说的,从dataset.tables[2]里面得到所要找的表,现在我用的是xsd,就是在app_code里面添加的数据集。
      

  9.   

    如果生成独立的三个表的话可以把结果放在一个DataTableCollection里面 然后读取
      

  10.   

    在存储过程的结尾处
    select * from 表3 
    在.cs中直接获取数据放到dataset中.
      

  11.   

    直接 获取....用dataset取出数据,读取的时候dataset.table[2]
      

  12.   

    首先,你只需要"第三个"表中的数据,那么不应该将三个表都返回给.net
    增加不必要的资源开支,你可以优化你的sql,只返回你需要的东西
    现在去wc,一会儿过来看看
      

  13.   

    /*SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage,
    Article.TitleImage_Height, Article.TitleImage_Width, Article.Content,
    Article.recommend, Article.Comment, Article.Author, Article.FromWhere,
    Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource,
    Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend,
    Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate,
    Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
    FROM Article 
    INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID 
    LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserID
    WHERE Article.ArtStatus=1 AND Article.Class_ID=77 
    ORDER BY Article.IsAllwaysOnTop DESC, 
    Article.ReleaseDate DESC
    */
    --准备存储过程的参数
    declare @pagesize int
    declare @pageindex int
    set @pagesize=50
    set @pageindex=2--这两个排序依据的字段类型不明,按名字猜的
    declare @IsAllwaysOnTop bit
    declare @ReleaseDate datetime
    declare @rowcount int
    --以下不判断参数的正确性,比如pageindex<=1或者pageindex>pagecount
    set @rowcount=(@pageindex-1)*@pagesize
    set rowcount @rowcount
    --得到所需要记录第一条之前的标志
    SELECT @IsAllwaysOnTop=IsAllwaysOnTop,@ReleaseDate=ReleaseDate
    FROM  Article 
    INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID 
    WHERE Article.ArtStatus=1 AND Article.Class_ID=77
    ORDER BY Article.IsAllwaysOnTop DESC, 
    Article.ReleaseDate DESC--然后选取@pagesize条记录
    set rowcount @pagesize
    SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage,
    Article.TitleImage_Height, Article.TitleImage_Width, Article.Content,
    Article.recommend, Article.Comment, Article.Author, Article.FromWhere,
    Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource,
    Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend,
    Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate,
    Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
    FROM Article 
    INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID 
    LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserID
    WHERE Article.ArtStatus=1 AND Article.Class_ID=77 
    --加入条件,要比刚才的记录排在更后
    AND Article.IsAllwaysOnTop>@IsAllwaysOnTop and Article.ReleaseDate>@ReleaseDate 
    ORDER BY Article.IsAllwaysOnTop DESC, 
    Article.ReleaseDate DESC
    --个人不喜欢使用游标:)好象M$也是这样建议的
      

  14.   

    绑定到ds 上用  ds.tables[2] 取第三个结果集