C++程序编译没错,调试疏失

C++程序编译没错,调试出错?
本帖最后由 VisualEleven 于 2012-12-04 11:05:29 编辑
C++写的连接数据库的程序,编译都没有错,调试时出现了这个:
Unhandled exception at 0x7c812afb in DMS.exe: Microsoft C++ exception: _com_error at memory location 0x0013f098..
这是出错的代码:
//根据员工编号读取所有字段值
void CUsers::GetData(CString cUserName)
{
//连接数据库
CADOConn m_ADOConn;
m_ADOConn.OnInitADOConn();

//设置SELECT语句
_bstr_t vSQL;
vSQL="SELECT * FROM Users WHERE UserName='" + cUserName + "'";

//执行SELECT语句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_ADOConn.GetRecordSet(vSQL);

//返回各列的值
if(m_pRecordset->adoEOF==1)
CUsers();
else
{
    UserName = cUserName;
Pwd = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Pwd");
User_type = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("User_type"));

}
//断开与数据库的连接
m_ADOConn.ExitConnect();

}
很急,求高手指点啊。。。
------解决方案--------------------
这个是异常抛出,可能是sql语法错误或者连接有问题。
需要捕捉一下:
try{
 ...
}catch(_com_error& err){
 AfxMessageBox(err.ErrorMessage());
}
------解决方案--------------------
用try...catch把数据库操作包含起来,看异常是什么~
------解决方案--------------------
_variant_t TheValue; //VARIANT数据类型
TheValue = m_pRecordset->GetCollect("NAME");//得到字段BIG_NAME的值
if(TheValue.vt!=VT_NULL)
name = (char*)_bstr_t(TheValue);

需要定义一个_variant_t变量,判断是否为空。
------解决方案--------------------
加的异常处理的位置不对,导致上述的变量未定义呀