各位大侠:    最近遇到一个奇怪的问题,如果存储过程返回实体表,则返回结果集是没问题。但是,如果存储过程是通过一个临时表返回结果集,居然得不到。我的代码如下,请高手指点。谢谢!OleDbConnection conn = new OleDbConnection(@"Provider=SQLOLEDB;Data Source=(local);Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=123456;");
conn.Open();
OleDbCommand comm = new OleDbCommand("exec p_get_goods", conn);
OleDbDataAdapter da = new OleDbDataAdapter(comm);
DataTable ldt = new DataTable();
da.Fill(ldt);
conn.Close();也就是,如果 p_get_goods 中通过实体表返回,是没有问题的,如果是临时表,则取不到。

解决方案 »

  1.   

    存储过程最后面 select * from table
    记得要加上
      

  2.   

    存储过程都是最简单的.
    create procedure p_get_goods
    ascreate table #tmp(
    vgdsno varchar(30))insert #tmp select top 99 vgdsno from t_goodsselect * from #tmp
    drop table #tmp
    return 0
    gogrant exec on p_get_goods to public
    go在查询分析器中执行是没问题的.
    奇怪的是,我不用临时表,是可以得到结果集的.
      

  3.   

    临时表会自动建立,仅存在在存储过程执行生命周期内,不要自己控制create、drop试试
      

  4.   

    去掉也不行.
    drop procedure p_get_goods
    go
    create procedure p_get_goods
    as
    select top 99 vgdsno into #tmp from t_goods
    select * from #tmp
    return 0
    go
    grant exec on p_get_goods to public
    go
    结果还是取不到.
      

  5.   

    set nocounts off
    set nocounts on
      

  6.   

    呃,好像是 set nocount on
    写反了
      

  7.   

    create procedure p_get_goods 
    as 
    set nocount on--相关操作set nocount off