这个是mssql2000的过程,使用ado打开,但是得不到结果集!提示:“ADODB.Recordset 对象关闭时,操作不被允许。 “CREATE          PROCEDURE sp_zj_getreport
(@in_station_id varchar(10),
 @in_unit_no    int,
 @in_begintime  datetime,
 @in_endtime    datetime)
ASbegin
--生成临时表
select ord =1,
report_name =' ',
        item_name =' ',
        danwei =' ',
        value_max =10,
        value_min =1,
        value_avg =5,
        value_95 =8
into #tmp
delete from #tmp
insert into #tmp values (0,'0',' ',' ',10,1,6,9)
------------------------------------------------------------
select * from #tmp
end
GO

解决方案 »

  1.   

    SET NOCOUNT ON------------------------
    select ord =1,
    report_name =' ',
            item_name =' ',
            danwei =' ',
            value_max =10,
            value_min =1,
            value_avg =5,
            value_95 =8
    into #tmp
    delete from #tmp
    insert into #tmp values (0,'0',' ',' ',10,1,6,9)
    select * from #tmp------------------------------------------------------------SET NOCOUNT OFFgo
      

  2.   

    DebugXP(NULL) ( ):
    但是我在delphi或者bcb上测试都可以得到正确结果啊!
      

  3.   

    不过我给你几个建议.
    1,存储过程定义时,参数不要写括号
    2,begin,end都是多余的代码
    (这两点恰好符合自定义函数的特征,呵呵)
    3,临时表用完后,最好再最后加上Drop table #tmp 以尽快释放资源,
    虽然它连接断开后会自动释放.
    如果临时表中数据量大,再drop前最好再来个:truncate table #tmp
      

  4.   

    我几天前刚遇到这个问题.
    我认为问题是这样的,在你的存储过程里面不止一条查询语句,因此它可能返回的不是一个单一的结果集,而是一个系列,在这个系列中只有最后一个结果集是打开的.你可以这样试试:
    while(rs!=NULL)
    {
            if(rs->state!=adoStateClosed)
            {
                 //做你要作的事
             }
         rs=rs->NextRecordset(NULL);           //获得下一个结果集
    }我就是通过这种办法解决的。
    不过很奇怪的是,在vb里面可以直接得到结果集。
    祝你好运。