try
{
    CString sSQL = "restore database test from disk = 'd:\\test.dat'";
    m_pConn->Execute((_bstr_t)sSQL, NULL, adCmdText);
}
catch(_com_error e)
{
    MsgBox(e.Description(), MB_ICONHAND);// 捕捉异常
     return -2;
}比如源文件不存在,或当前库正在使用无法恢复,这些错误都捕捉不到,但如果sql语句有语法错误,则可以捕捉到。有什么办法能把所有的错误都捕捉到。谢谢!

解决方案 »

  1.   

    确认 _com_error 是VC最顶级的异常类吗?也许它能捕捉的异常还是有限的把catch( e)改成catch(...)然后在catch中加入自己的ShowMessage试试看,是否能捕捉到异常。如果能,说明你用的_com_error 能捕捉的异常还是不够广泛。
      

  2.   

    to sunyuchuan86 :
    把catch( e)改成catch(...) 我试过,同样是捕捉不到上述的异常。我确实是想把所有的错误都能捉到。我也觉得可能如fcuandy所说,跟错误级别有关。为何SQL的语法错误可以捕捉,但非语法错误却捕捉不了呢?
      

  3.   

    总结一下:
    数据库连接、SQL语法错误、或某个操作的库、表不存在,这些都能捕捉到
    但恢复数据库时,若D:\test.dat不存在,或当前库在使用无法恢复,这些都捕捉不到