CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

ADO如何调用返回多个记录集的存储过程?

楼主myrou(myrou)2004-07-01 11:47:04 在 VC/MFC / 数据库 提问

Oracle数据库,存储过程如:  
  create   or   replace   procedure   sp_test  
                                                          (   i_cur1   in   out     type.cursortype  
                                                              i_cur2   in   out     type.cursortype  
                                                          )    
  is  
  begin  
  open   i_cur1   for   select   *   from   a;  
  open   i_cur2   for   select   *   from   b;  
  end   sp_test;  
   
  类似这种存储过程如何通过ADO调用? 问题点数:100、回复次数:5Top

1 楼pmwin(飞翔鸟)回复于 2004-07-01 15:46:49 得分 40

定义一个_CommandPtr指针,然后执行sql语句。  
  sql语句里是执行这个存储过程的语句。Top

2 楼myrou(myrou)回复于 2004-07-01 16:20:22 得分 0

这个存储过程是带参数的,怎么把参数带进去呢,  
   
  其他类型的参数好办,但是游标变量这种参数该如何传递??Top

3 楼ringphone(临风)回复于 2004-07-02 00:50:42 得分 10

upTop

4 楼myrou(myrou)回复于 2004-07-02 09:19:24 得分 0

当存储过程返回多个记录集的时候,可以通过pRstCompound   =   pRstCompound->NextRecordset((VARIANT   *)lngRec)来获取多个记录集,  
  但如果需要使用游标变量作为存储过程的入参时,又该如何将记录集作为入参传给存储过程?  
  Top

5 楼sohou(2007的春天)回复于 2004-07-04 09:27:27 得分 50

ADO使你能够在客户程序中通过数据提供者来方便地处理数据.ADO主要的优点是容易使用、高速、低内存、磁盘占用  
  在本文的示例工程中我们可以执行存储过程,传递参数给存储过程并接收它的返回值,以下是此过程的主要代码。  
   
   
  {      
        CString   strTmp;  
       
        CString   m_sdatasource;   //   Data   source   name  
        CString   m_sUserID;           //   User   Id  
        CString   m_sPassword;       //   Password  
   
        //   GET   the   above   values   from   the   user    
        //Without   creating   Datasource   we   can   use   database   by   the   following       code  
        /*   strTmp.Format(   "driver={sql   server};"  
                                                        "server=%s;"  
                                                        "Database=%s;""UID=%s;""PWD=%s;",  
                                                        m_server,m_sdatabase,m_sUserID,m_sPassword   );*/  
   
        strTmp.Format(   "dsn=%s;""UID=%s;""PWD=%s;",m_sdatasource,m_sUserID,m_sPassword   );  
        _bstr_t                   bstrSQLServerConnect;  
        _bstr_t   bstrProc   =(   L"sp_StartByteImport"   );;   //Stored   procedure   name  
        _variant_t   Final;  
        bstrSQLServerConnect   =   (LPCTSTR)   strTmp;  
        m_status="Empty   File";  
        _ConnectionPtr     Conn1;   //   connection   object   pointer  
        _CommandPtr           Cmd1;     //   command   object   pointer  
        _RecordsetPtr       Rs1;   //   recordset   object   pointer  
        bool                         bvalid   =   false;  
        try  
        {  
              Conn1.CreateInstance(   __uuidof(   Connection   )   );   //   Instantiating   connection   object  
      Conn1->ConnectionString   =   bstrSQLServerConnect;   //   giving   the   sqlconnection  
      Conn1->Open(   bstrEmpty,   bstrEmpty,   bstrEmpty   );   //   open   the   connection   object  
      Cmd1.CreateInstance(   __uuidof(   Command   )   );   //   creating   command   object  
      Cmd1->ActiveConnection   =   Conn1;                           //   giving   the   connection   handle  
      Cmd1->CommandText             =   _bstr_t(   bstrProc   );   //   passing   the   stored   procedue  
      Cmd1->CommandType             =   adCmdStoredProc;           //   type  
      Cmd1->Parameters->Refresh();                                   //   passing   string   value   as   argument   to   stored   procedure  
      Cmd1->Parameters->Item[   _variant_t(   (long)   1   )   ]->Value   =   _variant_t(   (LPCTSTR)m_sfilename   );  
      Rs1   =   Cmd1->Execute(   &vtEmpty,   &vtEmpty2,   adCmdUnknown   );   //   executing   the   stored   procedure   and   storing   the   recordset   value  
      bvalid   =   true;  
      Final     =   Rs1->Fields->GetItem(   _variant_t(   0L   )   )->Value;   //   getting   the   first   column   value   of   the   result   row  
      strTmp.Format(   "%s",   CrackStrVariant(   Final)   );   //   to   see   the   value  
      //   put   your   code   to   see   all   column   values        
        }  
        catch(   CException   *e   )   //   trapping   all   error   messages  
        {  
      TCHAR         szCause[255];          
              e->GetErrorMessage(szCause,   255);  
      m_status=szCause;  
        }  
        catch(   _com_error   &e   )  
        {  
  m_status=e.ErrorMessage(   );  
        }  
        catch(...)  
        {  
  m_status="Error   while   executing   the   Import";  
   
        }  
          //we   need   to   create   the   stored   procedures   below   before   running   the   application  
  //CREATE   PROCEDURE   sp_AddAccountingInfo   @nfinal   int,   @pcDate   datetime,  
  //@pcURL   varchar   (250),   @pcTop   varchar   (250),  
  //@pcQueryString   varchar   (250),   @pcBytes   int,   @pcRequests   int   AS  
                /*  
  Do   your   operation   here  
  */  
  //CREATE   PROCEDURE   sp_AddAccountingInfo  
  //@nfinal   int,  
  //@pcDate   datetime,  
  //@pcURL   varchar   (250),  
  //@pcTop   varchar   (250),  
  //@pcQueryString   varchar   (250),  
  //@pcBytes   int,  
  //@pcRequests   int  
  //AS  
  /*  
  Put   your   code   here  
  */  
  }  
   
  Top

相关问题

  • 关于用ADO调用SQL SERVER存储过程返回记录集的问题
  • 用ADO调用存储过程
  • Ado调用Sql server7.0存储过程
  • vc++(ADO)调用存储过程
  • ADO怎么调用存储过程啊?
  • ado调用存储过程,急,高分.
  • ADO调用存储过程的问题?
  • ado调用存储过程错误,help
  • 怎样用ADO调用存储过程
  • 用ado的访问sql server2000,调用存储过程是,如何知道放回的记录是多少条?

关键词

  • 存储过程
  • 语句
  • ado
  • 执行
  • bstrsqlserverconnect
  • bstrempty
  • szcause
  • 参数
  • 记录集
  • spassword

得分解答快速导航

  • 帖主:myrou
  • pmwin
  • ringphone
  • sohou

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo