none
通过SqlDataAdapter填充DataSet,存储过程有多个查询结果但是只能取到一个结果 RRS feed

  • 问题

  • C#里用SqlDataAdapter填充DataSet,存储过程有多个查询结果但是在DataSet里只能看到一个datatable。但是我在其他地方用同样的方法可以取到多个结果。

    C#的代码基本是一样的,我怀疑是存储过程的问题,能取到多个结果的存储过程用到了临时表,EXEC sp_executesql,不能取到多个结果集存储过程除了前面的之外还用到游标,自定义函数。

    补充一点,我在sql server 管理器里执行存储过程可以得到多个结果。

    请大侠们指点一下。

    2010年4月14日 2:30

答案

  • 试试在存储过程的 AS 子句后面添加下面这句

    SET NOCOUNT ON;

    2010年4月14日 4:03
  • 我想把查询结果放到临时表内,然后再select一下,用这样的方式,但是问题又出现了。
    set @sql='create table tempdb..##tmpT1( Col1 int,col2 nvarchar(50),'+@tableCol+')'
    EXEC sp_executesql @sql;
    select * from ##tmpT1;

    @tableCol是根据查询条件拼接起来的列定义。

    dataAdapter.Fill(ds);的时候出现对象名 '##tmpT1' 无效。的错误

    这是什么原因呢?##tmpT1'是全局临时表啊。。。

    2010年4月14日 5:16

全部回复

  • 试试在存储过程的 AS 子句后面添加下面这句

    SET NOCOUNT ON;

    2010年4月14日 4:03
  • 试过了,没有效果,问题依旧。

    试了一下,用select语句的查询都可以取到结果,EXEC sp_executesql @sql; 方式的结果取不到。

    2010年4月14日 4:11
  • 我想把查询结果放到临时表内,然后再select一下,用这样的方式,但是问题又出现了。
    set @sql='create table tempdb..##tmpT1( Col1 int,col2 nvarchar(50),'+@tableCol+')'
    EXEC sp_executesql @sql;
    select * from ##tmpT1;

    @tableCol是根据查询条件拼接起来的列定义。

    dataAdapter.Fill(ds);的时候出现对象名 '##tmpT1' 无效。的错误

    这是什么原因呢?##tmpT1'是全局临时表啊。。。

    2010年4月14日 5:16