请高手解答:VC+ADO执行存储过程的一个古怪问题

goldntman goldntman 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
以下是我用VC+ADO做的一个验证密码的函数
程序运行一段时间(一般大约14小时,不一定)后就产生了异常:报的错误为:
《未指定的错误》,把进程停调,重新运行,又正常了
(注:该函数由线程来调用)

int checkpwd(char* area,char* dhhm,char* pwd)
{
if(CoInitialize(NULL)!=S_OK)
{
::SendMessage(AfxGetMainWnd()->m_hWnd,WM_SHOWERROR,(WPARAM)"ADO Com库初始化失败",0);
return -1;
}

int ret=0;
CString str="0";
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_ParameterPtr pRet=NULL;
_ParameterPtr pIn1=NULL;
_ParameterPtr pIn2=NULL;
_ParameterPtr pIn3=NULL;
_ParameterPtr pOut=NULL;
VARIANT vtret,vtin1,vtin2,vtin3,vtout;

try
{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("DSN=hfcx_checkpwd;uid=test;pwd=test","","",0);
m_pConnection->CursorLocation=adUseClient;

m_pCommand.CreateInstance(_uuidof(Command));
m_pCommand->ActiveConnection=m_pConnection;
m_pCommand->CommandText="ValidPwd_10000";
m_pCommand->CommandType=adCmdStoredProc;
m_pCommand->CommandTimeout=20;

vtret.vt=VT_I4;
pRet=m_pCommand->CreateParameter(_bstr_t("RETURN_VALUE"),adInteger,adParamReturnValue,4,vtret);
m_pCommand->Parameters->Append(pRet);
pRet->Value=vtret;

vtin1.vt=VT_BSTR;
vtin1.bstrVal=_bstr_t(dhhm);
pIn1=m_pCommand->CreateParameter(_bstr_t("DHHM"),adVarChar,adParamInput,9,vtin1);
m_pCommand->Parameters->Append(pIn1);
pIn1->Value=vtin1;

vtin2.vt=VT_I4;
vtin2.intVal=0;
pIn2=m_pCommand->CreateParameter(_bstr_t("TYPE"),adInteger,adParamInput,4,vtin2);
m_pCommand->Parameters->Append(pIn2);
pIn2->Value=vtin2;

vtin3.vt=VT_BSTR;
vtin3.bstrVal=_bstr_t(pwd);
pIn3=m_pCommand->CreateParameter(_bstr_t("PWD"),adVarChar,adParamInput,7,vtin3);
m_pCommand->Parameters->Append(pIn3);
pIn3->Value=vtin3;

vtout.vt=VT_I4;
pOut=m_pCommand->CreateParameter(_bstr_t("RET"),adInteger,adParamOutput,4,vtout);
m_pCommand->Parameters->Append(pOut);
pOut->Value=vtout;

m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
ret=(pOut->Value).intVal;
m_pConnection->Close();
::CoUninitialize();
}
catch(_com_error e)
{
ret=-1;
str.Format("验证10000密码时产生异常:%s-%s-%s---%s",area,dhhm,pwd,e.ErrorMessage());
::SendMessage(AfxGetMainWnd()->m_hWnd,WM_SHOWERROR,(WPARAM)str.GetBuffer(0),0);
::CoUninitialize();
return ret;
}
return ret;
}
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
goldntman
VC/MFC 16,550 成员 421,606 内容