我的存储过程内容如下
create procedure prTest
as
select * from tbtest1
........
........
select * from tbtest2我通过vc调用,返回多个结果集,我需要取得所有结果集,程序要怎么调用才能取得所有结果集?

解决方案 »

  1.   

    多个recordset??你可以把他们放到一个数组里面
    然后返回数组首个元素的地址
    然后通过这个来访问数组中每个元素
      

  2.   

    用VC怎么实现?…………和普通数组一样啊比如
    _RecordsetPtr  pp[5]然后
    pp[0]->open(……)
    pp[1]->open(……)
    ………………pp[5]->open(……)
    然后return pp;然后在使用的地方
    _RecordsetPtr * ppp = 返回值然后
    ppp[0]
    ppp[1]
    ………………不过这里 pp不能是函数的局部变量
    因为是函数的局部变量的话,函数返回,相对应的栈清空了那个返回的指针就无效了
    这个要注意一下
      

  3.   

    楼上的,你那是一条条执行Select语句,人家那么多语句是在存储过程里的,执行起来就一句prTest,没办法放到数组里的,必须得到下一个结果集才行。楼主你处理完一个结果集以后可以通过NextRecordset来取下一个结果集:
    _RecordsetPtr  rs;
    ...
    连接数据库,调用存储过程,处理完一个结果集,然后:
    long lngRec = 0;
    while(rs)
    {
    rs = rs->NextRecordset((VARIANT *)lngRec);
    if(rs)
    //已得到下一个结果集,继续处理
    ...
    }
      

  4.   

    这样又不如用用ADODB中的Recordset对象有一个NextRecordset属性,可以用这个来获取下一个记录集,但我在网上又找不到例子,请高手给个例子看看~~~~
      

  5.   

    谢谢 ringphone(临风) 我试试~~
      

  6.   

    _RecordsetPtr  *rs;////////////////如果这里是指针,下面要怎么赋给rs
    ...
    连接数据库,调用存储过程,处理完一个结果集,然后:
    long lngRec = 0;
    while(rs)
    {
    rs = rs->NextRecordset((VARIANT *)lngRec);//////////这里要怎么改??????
    if(rs)
    //已得到下一个结果集,继续处理
    ...
    }
    ///////////////////////////////
      

  7.   

    _RecordsetPtr  rs应该是这个,hoho
      

  8.   

    CREATE procedure proc_getSMCBQueue @flag tinyint
    asset rowcount 3select *  into #send  from SMCBQueue  where flag = @flag  update SMCBQueue set flag = SMCBQueue.flag + 100,loops = SMCBQueue.loops + 1 from #send  where SMCBQueue.ID = #send.IDset rowcount 0select * from #senddrop table #send
    GO我的存储过程就是这么简单,就是想回
    select * from #send
    得到的记录集就是是得不到啊,是不是要调用_RecordsetPtr的NextRecordset方法,
    还是用到了临时表,根本就回不了记录集啊,
    我忙了几天搞这个就是搞不出来,我想得到这个存储过程的记录集要怎么做才好啊,
      

  9.   

    m_pRecordset = m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
    在VC程序中对于上面的存储过程调用完后,再对m_pRecordset进行处理时就发生异常,
    try
    {

    if(!(m_pRecordset->adoEOF))
    {

       while(!m_pRecordset->adoEOF)
       {
       }
    }
    }
    catch(...)
    {
    }在这里if(!(m_pRecordset->adoEOF))
    就进去不了,到CATCH处了,
    是怎么回事,那里出错了,
      

  10.   

    drop table #send
    把这一条去掉试试