有关ado打开access数据库出错的问题?

jackson35296 2008-09-08 05:47:49
用_ConnectionPtr的Open方法去打开一个access数据库,好像只有两种情况,一个情况是成功,一个情况是程序崩溃。想问大家如何实现打开错误的情况下程序不崩溃?因为一个大系统不能因为这个小问题而崩溃。我试过了,当且仅当我的数据库文件被替换成与之同名的非数据库文件时会出错误。比如我定义的数据库文件名为123.mdb,如果被人删除或改名都不存在问题,因为我预先处理了这两种情况,就怕有人恶意将一个其他文件改成123.mdb,这样就造成了整个程序崩溃,不知道当初写Open函数的人为啥不在错误情况下返回个FALSE,而是直接崩掉程序呢?这点很让人郁闷,造成整个系统的一个隐患,求助各位。
...全文
131 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhkefa 2008-09-09
  • 打赏
  • 举报
回复
,,难道真是没处理异常??
jackson35296 2008-09-09
  • 打赏
  • 举报
回复
谢谢大家,用try{}catch{}问题解决了,以前用的FAILED(pConn->Open()),这个论坛就是好啊
内存泄漏 2008-09-08
  • 打赏
  • 举报
回复
晕..你不捕获异常,程序当然会崩溃。。

用如下代码把你的代码包起来,可以捕获ADO操作所遇到的异常,包括数据库文件找不到等:
try
{
//你的代码
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}
一条晚起的虫 2008-09-08
  • 打赏
  • 举报
回复
把数据库操作都放到
try{}catch(){}块中去。
崩溃是因为你没有处理抛出的异常。
xsc2001 2008-09-08
  • 打赏
  • 举报
回复
不光是在Connection对象的Open上加上Try{}catch(),因为你的数据库文件是非法的,所以应该是在打开记录集是出错了,所以在打开记录集的时候也得加上Try{}catch(...){}.你可以要打开表出错的情况下自动创建这个空表。
draculacsdn 2008-09-08
  • 打赏
  • 举报
回复
你可以预先判断一下文件是否是mdb文件,二进制读取文件,然后找固定信息,比如jpg文件中一定有ff d8 ff e0,bmp文件一定有42 4d 36 的二进制值,查一查mdb破解密码的相关文章,就知道什么是mdb的二进制特征了。
scq2099yt 2008-09-08
  • 打赏
  • 举报
回复
很简单,多用try catch
try{
数据库操作(连接等)
}
catch(...)
{
输出自定义的错误信息
}
OenAuth.Core 2008-09-08
  • 打赏
  • 举报
回复
或才用FAILED这个宏:

    CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
pConn.CreateInstance("ADODB.connection");
_RecordsetPtr pRs(__uuidof(Recordset));

CString conn="Driver={SQL Server};server=(local);uid=sa;database=pubs";
if(FAILED(pConn->Open((_bstr_t)conn,"","",-1)))
{

AfxMessageBox("连接失败");
return;
}

pConn->Close();
pConn.Release();
CoUninitialize();
OenAuth.Core 2008-09-08
  • 打赏
  • 举报
回复
很简单,多用try catch
try{
数据库操作(连接等)
}
catch(...)
{
输出自定义的错误信息
}

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧