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

用ADO调用存储过程

楼主Acely(Acely)2001-07-03 17:54:08 在 VC/MFC / 基础类 提问

我的这个函数只能执行一次存储过程,可是第二次执行时就出错。请问原因  
  void   test()  
  {CString   sPhone="123",retMsg="您申请的业务代码不存在";  
  int   Succ=0;  
  InsSysMsg("",sPhone,"xtxx","0",Succ,retMsg);  
  }  
   
   
  bool   InsSysMsg(CString   sPhone,CString   dPhone,CString   CodeId,CString   LenFlag,int&   Succ,CString   Msg)  
  {  
  if(!AfxOleInit()){  
          ::AfxMessageBox("Init   OLE   failed!");  
  return   0;  
  }  
  ::CoInitialize(NULL);  
  try{  
  _ConnectionPtr   pCnn(_uuidof(Connection));  
  _CommandPtr         pCmd(_uuidof(Command));  
   
  pCnn->Open((_bstr_t)"DSN=test;UID=work;PWD=work;","","",-1);  
  pCmd->ActiveConnection=pCnn;  
  pCmd->CommandType=adCmdStoredProc;  
  pCmd->CommandText="MS_000_ins";  
   
  _ParameterPtr   pParam;  
  _variant_t   vMsg,vNewid;  
  vMsg.vt=VT_BSTR;  
  vMsg.bstrVal=(_bstr_t)Msg;    
          pParam=pCmd->CreateParameter(_bstr_t("Msg"),adBSTR,adParamInput,Msg.GetLength(),_variant_t(vMsg));  
  pCmd->Parameters->Append(pParam);  
   
  vNewid.vt=VT_I2;  
  pParam=pCmd->CreateParameter(_bstr_t("Newid"),adInteger,adParamOutput,sizeof(adInteger),_variant_t(vNewid));  
  pCmd->Parameters->Append(pParam);  
  pCmd->Execute(NULL,NULL,adCmdStoredProc);  
   
  _variant_t   temp=pCmd->Parameters->Item["Newid"]->GetValue();  
  int   i=temp.intVal;  
  ::CoUninitialize();  
  return   1;  
  }  
  catch(_com_error   e){  
  ::CoUninitialize();  
  AfxMessageBox(e.ErrorMessage());  
  return   0;  
  }  
  }  
  问题点数:20、回复次数:7Top

1 楼LuoQS1((大水货))回复于 2001-07-03 18:06:12 得分 1

没释放连接吧Top

2 楼theSky(云霄)回复于 2001-07-03 18:07:09 得分 1

没有释放   pCnn,pCmdTop

3 楼serf(塞外雪)回复于 2001-07-03 18:19:34 得分 1

智能指针析构在::CoUninitialize()后,危险  
                  Top

4 楼Acely(Acely)回复于 2001-07-04 09:18:55 得分 0

用什么语句释放Top

5 楼xwchena(天雨)回复于 2001-07-16 16:58:12 得分 6

pCmd->release();  
  pCnn->close();Top

6 楼mywater(在水一方)回复于 2001-07-16 23:22:15 得分 6

        if(!AfxOleInit()){  
  //这个函数是不是只需要调用一次就行了???放在app中去!  
          ::CoInitialize(NULL);  
   
  还有一种可能性,你的数据源只允许一个连接  
  如果是这样,你可以把pCnn拿到外面去,确保连接一次,或者每次用万就释放掉(这个最好,  
  OleDB会自动处理优化方面的问题)  
   
  Top

7 楼cafecai(入门新手㊣)回复于 2001-07-16 23:33:12 得分 5

AfxOleInit()只能运行一次,应该放在CYourClassApp::InitInstance()的前面,  
  在运行pCnn->Open前要确认pCnn已经关闭Top

相关问题

  • 怎样用ADO调用存储过程
  • Ado调用Sql server7.0存储过程
  • vc++(ADO)调用存储过程
  • ADO怎么调用存储过程啊?
  • ado调用存储过程,急,高分.
  • ADO调用存储过程的问题?
  • ado调用存储过程错误,help
  • 存储过程调用存储过程
  • 存储过程的调用!
  • vb 调用存储过程

关键词

  • pcnn
  • pcmd
  • vmsg
  • vnewid
  • sphone
  • pparam
  • succ
  • bstr
  • cstring
  • vt

得分解答快速导航

  • 帖主:Acely
  • LuoQS1
  • theSky
  • serf
  • xwchena
  • mywater
  • cafecai

相关链接

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

广告也精彩

反馈

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