CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在vc中通过ado如何读取sqlserver的存储过程的返回值?

楼主heyongzhou()2002-03-27 10:41:01 在 VC/MFC / 基础类 提问

存储过程可以通过output返回一些参数,而它本身也可以通过return一个int来返回一些信息。前者我可以得到,但是后者我不会。怎么读取?  
  以下是读取output参数的返回值的例子,谁能给我读取存储过程通过return得到的值?  
  vtTemp="";  
  _ParameterPtr=m_pCmd->CreateParameter("retstring",adChar,adParamOutput,10,vtTemp);  
  m_pCmd->Parameters->Append(_ParameterPtr);  
   
  m_pCmd->ActiveConnection   =   m_pConnection;//将建立的连接赋值给它  
   
  m_pCmd->Execute(NULL,NULL,adCmdStoredProc);///执行命令  
   
  问题点数:100、回复次数:4Top

1 楼masterz(www.fruitfruit.com)回复于 2002-03-27 11:16:12 得分 0

//   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   Connection's   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);  
              }  
      }  
  }Top

2 楼ZHENG017()回复于 2002-03-27 13:43:35 得分 100

RecordsetPtr   ptr;  
  ptr.CreateInstance(__(uuidof(Recordset));  
  ....  
  ptr=m_pCmd->Execute(NULL,NULL,adCmdStoredProc);  
  _variant_t   thereturnvalue=ptr->GetCollect   (COleVariant((short)0));Top

3 楼masterz(www.fruitfruit.com)回复于 2002-03-27 13:51:15 得分 0

你点贴子后面的管理,我已经作了答复,不知为什么不显示出来Top

4 楼yins(我是土人)回复于 2002-03-27 14:02:21 得分 0

upTop

5 楼wnchg(温水青蛙)回复于 2002-04-21 16:00:21 得分 0

关注Top

相关问题

  • vc++(ADO)调用存储过程
  • 请问各位大侠,如何在VC++下利用ADO调用SQLServer中建立的存储过程。
  • 在VB中如何通过ADO调用SQLSERVER的存储过程,并获得存储过程的返回值??
  • 在VC中如何用ado调用包里的存储过程?
  • 奇怪的vc+ado存储过程参数问题
  • 求一SQLSERVER存储过程
  • SQLServer存储过程问题
  • 如何在VC中用ADO调用SQL SERVER中的存储过程?
  • 用ADO调用存储过程
  • Ado调用Sql server7.0存储过程

关键词

  • 存储过程
  • null
  • initole
  • 读取
  • pcmd
  • 值
  • parameterptr
  • 返回
  • adodb
  • recordset

得分解答快速导航

  • 帖主:heyongzhou
  • ZHENG017

相关链接

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

广告也精彩

反馈

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