首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

try and catch 中对数据库的异常检查有关问题

2012-01-06 
try and catch 中对数据库的错误检查问题链接数据库等问题忽略,仅对数据库链接时的部分操作提出疑问。tryan

try and catch 中对数据库的错误检查问题
链接数据库等问题忽略,仅对数据库链接时的部分操作提出疑问。try   and   catch究竟能捕获到数据库访问错误时的什么信息,如下面程序段所示:
bool   CRecords::addARecord   (   LPCSTR   uName,   LPCSTR   password   )
{
cstrUser   =   "select   id,nickname   from   userInfo ";
lpcstrUser   =   cstrUser;
try
{
m_pRecordset-> Open(lpcstrUser,
m_pConnection.GetInterfacePtr(),  
adOpenDynamic,
adLockOptimistic,
adCmdText);
if   (   !m_pRecordset-> BOF   )
m_pRecordset-> MoveLast();
m_pRecordset-> AddNew   ();
lpcstrUser   =   uid;
m_pRecordset-> PutCollect( "id ",   lpcstrUser);
m_pRecordset-> PutCollect( "password ",   password);
m_pRecordset-> Update();
m_pRecordset-> Close();
}
catch   (   _com_error   *e   )
{
AfxMessageBox(e-> ErrorMessage());
m_pRecordset-> Close();
return   false;
}
return   true;
}

这是一个很简单的程序,目的是向数据库存入数据。假设数据库中   userInfo   表中没有   id   项,那么该程序就会直接瘫痪掉。可是我使用了try   and   catch结构,理论上来说应该是com口抛出_com_error对象,然后catch捕获该对象进行异常处理。但是每次运行的结果确是程序执行非法操作,直接瘫痪掉,那么请问try   and   catch   在这里怎么就不处理异常了呢?还是我的程序编写上本来就存在是try   and   catch   无效的错误?



[解决办法]
用catch(...)
因为抛出的异常如果不是_com_error的话你的catch是捕捉不到的。
[解决办法]
( _com_error *e )
好像一般都是用( _com_error &e )

这个方法确实有一些异常无法捕获到,所以有本书上提到,自己判断返回值,然后手工抛出异常……

热点排行