在用ADO技术查询数据库时,一直提示有未处理的异常,如下图:
调试发现异常产生在Open函数处,苦思冥想找不到原因,最后发现是传进来的SQL语句写错了,错写成一个不存在的表。
代码:
BOOL CAdoRecordset::Open(CString strSql, CAdoDatabase* pdbConn)
{
//创建Recordset对象
HRESULT l_nRet = m_pdbRecordSet.CreateInstance(__uuidof(Recordset));
if (FAILED(l_nRet))
{
//AfxMessageBox("创建数据集对象实例失败");
return FALSE;
}
l_nRet=m_pdbRecordSet->Open(_variant_t(strSql),(IDispatch*)pdbConn->m_pdbConn,adOpenKeyset,adLockOptimistic,adCmdText);
if (FAILED(l_nRet))
{
//AfxMessageBox("执行Sql语句失败");
return FALSE;
}
//AfxMessageBox("执行Sql语句成功");
return TRUE;
}
SQL语句:
写代码不认真造成的后果…………
如果不想弹出有未处理异常的框,就要捕捉这个异常,代码写成下面这样:
try
{
m_pdbRecordSet->Open(_variant_t(strSql),(IDispatch*)pdbConn->m_pdbConn,adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description()+"检查SQL语句是否有错误!");
return FALSE;
}
这样就不会弹出那么吓人的界面了,而是弹出一个对话框,提示SQL语句是否有错误。