当前位置:首页 » 多媒体相关

急!!大家帮帮我


我的存储过程返回结果集,在查询分析器里运行正常,可是用vc调用存储过程,当运行到“if(!prs->getadoeof())”时,总是提示:"对象关闭时,操作不被允许!"错在哪里呀,求大家帮帮我。  
  vc调用过程如下:  
  _commandptr   m_pcommand;  
  m_pcommand.createinstance(__uuidof(command));  
  _parameterptr   param;      
  param   =   m_pcommand->createparameter("",advarchar,adparaminput,m_scontractno.getlength()+1,_variant_t(m_scontractno));  
  m_pcommand->parameters->append(param);  
  m_pcommand->parameters->refresh();  
  m_pcommand->commandtext=_bstr_t("get_report");//存储过程的名称  
  m_pcommand->activeconnection   =   theapp.m_pconn;     //需要使用的ado连接    
  m_pcommand->commandtype=adcmdstoredproc;  
   
  _recordsetptr   prs;  
  try  
  {  
   
  prs=m_pcommand->execute(null,   null,adcmdstoredproc);  
   
  if(!prs->getadoeof())  
  {  
  prs->movefirst();  
                                                        .....  
  }  
  m_pcommand.detach();  
   
  }  
  catch(_com_error   &e)  
                    ......  
 

推荐阅读

  • Legato Networker备份系统运行维护(一) [详细内容]
  • Verari BR2刀片服务器系统简介 服务器存储频道 [详细内容]
  • Sun明年发新Niagara服务器 性能提高64倍 服务器存储频道 [详细内容]
  • 震惊!PStwo新型直读IC研制成功? [详细内容]
  • 不得已告别cx65 [详细内容]
  • 采购推荐:戴尔PowerEdge 1900塔式服务器 服务器存储频道 [详细内容]
  • 迷你主机PStwo已提前在北美上市 [详细内容]
  • 网友回答:
    网友:masterz

    //   sql   server,   stored   procedure   ,   command   ,   recordset,   input   parameter,   output   parameter,   returned   recordset   from   stored   procedure  
      //execute   stored   procedure   ,   get   returned   value,   output   value,   and   returned   recordset.  
      #include   "stdafx.h"  
      #import   "c:\progra~1\common~1\system\ado\msado15.dll"   rename(   "eof",   "adoeof"   )  
          struct   initole  
          {  
              initole()     {   ::coinitialize(null);   }  
              ~initole()   {   ::couninitialize();     }  
          }   _init_initole_;  
      void   printprovidererror(adodb::_connectionptr   pconnection);  
       
      int   main(int   argc,   char*   argv[])  
      {  
                      printf("create   a   adparamreturnvalue   for   command   object   to   get   return   value   of   stored   procedure\n");  
                      printf("reference   :msdn---append   and   createparameter   methods   example   (vc++)\n");  
                      adodb::_connectionptr     conn1;  
                      adodb::_commandptr         cmd1;  
                      adodb::_recordsetptr     rs1;  
                      adodb::_parameterptr     retparam=   null;  
                      adodb::_parameterptr   inparam=null;  
                      adodb::_parameterptr   outparam=null;  
                      _variant_t     vtempty   (disp_e_paramnotfound,   vt_error);  
                      _variant_t     vtempty2   (disp_e_paramnotfound,   vt_error);  
                      _bstr_t         bstrconnect(   l"driver={sql   server};server=cell;database=zhg;uid=sa;pwd=;"   );  
                      //   the   following   stored   procedure   return   12345   int   value  
                      _bstr_t         bstrcreate   (   l"create   proc   sp_adotest(   @outparam   int   output,@inparam   int   )   "  
                                      l"as   "  
                                      l"select   @outparam   =   @inparam   +   10   "  
                                      l"select   *   from   table1"  
                                      l"return   12345"   );  
                      _bstr_t         bstrsp(l"sp_adotest"   );  
                      try  
                      {  
                                      _bstr_t   bstrempty;  
                                      conn1.createinstance(   __uuidof(   adodb::connection   )   );  
                                      cmd1.createinstance(   __uuidof(   adodb::command   )   );  
                                      rs1.createinstance(__uuidof(adodb::recordset));  
                                      //   establish   connection.  
                                      conn1->connectionstring   =   bstrconnect;  
                                      conn1->open(   bstrconnect,   bstrempty,   bstrempty,   -1   );  
                                      //   open   recordset.  
                                      cmd1->activeconnection   =   conn1;  
                                      cmd1->commandtext             =   bstrsp;  
                                      cmd1->commandtype             =   adodb::adcmdstoredproc;  
                                      retparam=cmd1->createparameter(_bstr_t("return"),adodb::adinteger,adodb::adparamreturnvalue,sizeof(int));  
                                      cmd1->parameters->append(retparam);  
                                      outparam   =   cmd1->createparameter(_bstr_t("outparam"),adodb::adinteger,adodb::adparamoutput,sizeof(int));  
                                      cmd1->parameters->append(outparam);  
                                      inparam   =   cmd1->createparameter(_bstr_t("inparam"),adodb::adinteger,adodb::adparaminput,sizeof(int),_variant_t(   (long)   10   ));  
                                      inparam->value=_variant_t(   (long)   10   );  
                                      cmd1->parameters->append(inparam);  
                                      cmd1->parameters->refresh();  
                                      cmd1->parameters->item[   _variant_t(   _bstr_t("@inparam")   )   ]->value   =_variant_t(   (long)   11   );  
                                      rs1->put_cursorlocation(adodb::aduseclient);  
                                      rs1->open((_variant_t((idispatch   *)   cmd1)),vtempty,adodb::adopenstatic,  
                                                      adodb::adlockreadonly,   -1);  
                                      //   get   return   value   of   the   stored   procedure.adcmdunknown  
                                      tchar   tcbuf[1024];  
                                      long   retvalue=cmd1->parameters->item[(short)0]->value;  
                                      long   p2=cmd1->parameters->item[(short)1]->value;  
                                      long   p3=cmd1->parameters->item[(short)2]->value;  
                                      int   recordcount=0;  
                                      if(rs1->state==adodb::adstateclosed)  
                                                      messagebox(null,"no   recordset   is   returned   from   the   stored   procedure","information",mb_ok);  
                                      else  
                                                      recordcount   =   rs1->getrecordcount();  
                                      wsprintf(tcbuf,"retvalue   of   the   stored   procedure:%d,input   value:%d,output   value:%d,record   count   :%d",retvalue,p2,p3,recordcount);  
                                      messagebox(null,tcbuf,"output",mb_ok);  
                      }  
          catch(_com_error   &e)  
          {  
                  _bstr_t   bstrsource(e.source());  
                  _bstr_t   bstrdescription(e.description());  
                  printf("\ncom   error   occurred,   source   :   %s   \n   description   :   %s   \n",(lpcstr)bstrsource,(lpcstr)bstrdescription);  
              printprovidererror(conn1);  
          }  
                      return   0;  
      }  
      void   printprovidererror(adodb::_connectionptr   pconnection)  
      {  
          //   print   provider   errors   from   connection   object.  
          //   perr   is   a   record   object   in   the   connections   error   collection.  
                      adodb::errorptr     perr   =   null;  
          long             ncount   =   0;  
          long             i   =   0;  
       
          if(   (pconnection->errors->count)   >   0)  
          {  
                  ncount   =   pconnection->errors->count;  
                  //   collection   ranges   from   0   to   ncount   -1.  
                  for(i   =   0;   i   <   ncount;   i++)  
                  {  
                      perr   =   pconnection->errors->getitem(i);  
                      printf("\n\t   error   number:   %x\t%s",   perr->number,   (lpcstr)perr->description);  
                  }  
          }  
      }

    .

    讨论区

    Login