CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

VC中如何调用存储过程???急救!!!

楼主linxioc(阿C)2006-07-24 19:15:14 在 VC/MFC / 数据库 提问

例如我写了一个存储过程,我在VC中要怎么调用?  
  比如我调用一个SQL语句时是这样:  
  m_pRecordset->Open("SELECT   *   FROM   table1",m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);  
  那么我要调用一个存储过程时要如何来写,是将上面的SQL语句字符串替换为存储过程字符串吗???  
  我试过了,直接替换后会运时出错,请问大侠要怎么调用???小弟谢谢了  
  问题点数:10、回复次数:3Top

1 楼joan_16(音音)回复于 2006-07-28 13:28:52 得分 0

pCmdKPI->ActiveConnection   =   m_DBKPI;   //pConnection是有效的,已处理过的  
          pCmdKPI->CommandText   =   "dbo.jm_kpi";  
          pCmdKPI->CommandType   =   adCmdStoredProc;  
          pCmdKPI->CommandTimeout   =   15;  
   
  VARIANT   var   ;  
  var.vt   =   VT_BSTR;  
  var.bstrVal     =   _bstr_t(date1);   //带入的实参  
  pParamKPI1->Type   =   adVarChar;  
  pParamKPI1->Size   =   10;  
  pParamKPI1->Direction   =   adParamInput;  
  pParamKPI1->Value   =   var;  
  pCmdKPI->Parameters->Append(pParamKPI1);  
   
          var.vt   =   VT_BSTR;  
  var.bstrVal     =   _bstr_t(date2);   //带入的实参  
  pParamKPI2->Type   =   adVarChar;  
  pParamKPI2->Size   =   10;  
  pParamKPI2->Direction   =   adParamInput;  
  pParamKPI2->Value   =   var;  
          pCmdKPI->Parameters->Append(pParamKPI2);  
  try  
  {  
  pCmdKPI->Execute(NULL,NULL,adCmdStoredProc);    
  m_Report_KPI   =m_Application_KPI->OpenReport   ("report\\KPIReport.rpt");  
        //数据库服务器10.100.1.114,数据库名BDC,用户名sa,密码sql  
  m_Report_KPI->Database->Tables   ->Item   [1]->SetLogOnInfo("10.100.1.114","BDC","sa","sql");  
  querysql   =   _bstr_t("CStr(CDate({JMLOGINFO.log_date}))   in   '"   +   date1   +   "'   to   '"   +   date2   +   "'   and   trim({JMLOGINFO.ord_code})   <>   ''   and   NOT   iSNull({JMLOGINFO.ord_code})");  
  m_Report_KPI->PutRecordSelectionFormula(querysql);  
      //将m_Report与报表控件连接  
  m_CRViewer_KPI.SetReportSource(m_Report_KPI);  
  //显示报表工具条  
  m_CRViewer_KPI.SetDisplayToolbar   (TRUE);  
  //不显示报表左边的分组树  
  m_CRViewer_KPI.SetDisplayGroupTree   (FALSE);  
        //不显示控件边框  
  m_CRViewer_KPI.SetDisplayBorder   (FALSE);  
        //刷新数据    
  m_CRViewer_KPI.Refresh();  
  m_CRViewer_KPI.UpdateData(TRUE);  
  //显示报表内容      
  m_CRViewer_KPI.ViewReport();  
  }  
  catch(_com_error   &e)    
  {  
  CString   err1;  
  err1.Format("%s",   (char*)(e.Description())   );  
  AfxMessageBox("存储过程执行失败!"+err1);  
  }Top

2 楼sh_caizicheng(每天一小步,成就一大步)回复于 2006-08-06 23:14:20 得分 0

学习中Top

3 楼SoLike(思危)回复于 2006-08-07 00:34:45 得分 0

VC执行一个不带参数的存储过程,返回一个记录集:  
   
    m_pRecordSet.CreateInstance("ADODB.Recordset");  
    #ifdef   _DEBUG  
    if   (m_pRecordSet   ==   NULL)  
    {  
      AfxMessageBox("RecordSet   对象创建失败!   请确认是否初始化了COM环境.");  
      return;  
    }  
    #endif  
    ASSERT(m_pRecordSet   !=   NULL);  
    CString   sql="TestGet";  
    int   i,recordcount;  
    try  
    {  
      m_pRecordSet->Open((_variant_t)sql,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdStoredProc);  
      recordcount=m_pRecordSet->GetRecordCount();//Get   records   total.    
      if(!m_pRecordSet->adoEOF)  
      {  
        for(i=0;i<recordcount;i++)  
        {  
          AfxMessageBox((LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Account"));  
          m_pRecordSet->MoveNext();  
        }  
      }  
      m_pRecordSet->Close();  
    }  
    catch(_com_error   e)  
    {  
      CString   temp;  
      temp.Format(_T("Warning:   打开记录集发生异常.   错误信息:   %s;   文件:   %s;   行:   %d\n"),   e.ErrorMessage(),   __FILE__,   __LINE__);  
      AfxMessageBox(temp);  
    }  
   
  如果不用存储过程将sql变量改成sql语句就可以了.  
   
     
   
  VC执行一个带参数的存储过程,返回单个值:  
   
    CString   retu;  
    m_pCommand.CreateInstance("ADODB.Command");  
    #ifdef   _DEBUG  
    if   (m_pCommand   ==   NULL)  
    {  
      AfxMessageBox("Command   对象创建失败!   请确认是否初始化了COM环境.");  
    }  
    #endif  
    ASSERT(m_pCommand   !=   NULL);  
    //输入参数   Member  
    _ParameterPtr   pParamMember;  
    pParamMember.CreateInstance("ADODB.Parameter");  
    pParamMember->Name="member";     //所用存储过程参数名称  
    pParamMember->Type=adChar;   //参数类型  
    pParamMember->Size=32;     //参数大小  
    pParamMember->Direction=adParamInput;//表明是输入参数  
    pParamMember->Value=_variant_t(member);  
    m_pCommand->Parameters->Append(pParamMember);  
    //返回值  
    _ParameterPtr   pParamOk;      
    pParamOk.CreateInstance("ADODB.Parameter");  
    pParamOk->Name="welcome";     //参数2名称  
    pParamOk->Type=adChar;     //字符串  
    pParamOk->Size=70;       //大小为70个字节  
    pParamOk->Direction=adParamOutput;   //声明是输出参数  
    m_pCommand->Parameters->Append(pParamOk);  
      //执行存储过程  
    m_pCommand->ActiveConnection=m_pConnection;  
    m_pCommand->CommandText="GetWelcome";     //存储过程名称  
    m_pCommand->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc  
    m_pCommand->Execute(NULL,   NULL,   adCmdStoredProc);  
    retu=(char*)_bstr_t(pParamOk->Value);  
    pParamMember->Release();  
    return   retu;Top

相关问题

关键词

得分解答快速导航

  • 帖主:linxioc

相关链接

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

广告也精彩

反馈

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