您的位置:首页 > 数据库

数据库读写捕获_com_error错误的注意事项

2009-08-06 14:26 337 查看
Code

char* m_sErrorMessage="";//数据库操作类的成员变量
try{
pRecordset = m_pConnection->Execute(_bstr_tsqlString),&vRecordsAffected,adCmdText) ;
return true;
}
catch (CException* ex)
{
ex->GetErrorMessage(m_sErrorMessage,255);
return false;
}
catch(_com_error e)
{
CString tchStr=e.ErrorMessage();
m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr;
return false;
}
catch()
{
m_sErrorMessage="查询记录时遇到未知错误!!";
return false;
}

当走到m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr 一步后,m_sErrorMessage有正常值,但走完return false后m_sErrorMessage指针错误,原因是tchStr为局部变量,而m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr 让m_sErrorMessage指针指向了要被销毁的局部变量。

解决方法:把m_sErrorMessage声明为std::string, ex->GetErrorMessage(m_sErrorMessage,255)处则先用char m_chErrorMessage[255]获取错误信息,再直接 m_sErrorMessage=m_chErrorMessage赋值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: