请高手解答:VC+ADO执行存储过程的一个古怪问题
以下是我用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;
}