西软服务器显示数据库异常,异常:数据库异常

异常:数据库异常

02/21/2013

本文内容

本文演示如何处理数据库异常。大多数材料本文中应用您使用的是了开放式数据库连接 (odbc) 的 MFC 类或数据访问对象的 MFC 类一起使用 (DAO)。对一个或其他模型中的物质特定显式标记。主题包括:

对于异常处理的路由

数据库异常处理的示例

对于异常处理的路由

该方法相同的是否使用 DAO 或 ODBC 一起使用。

应始终编写异常处理程序来处理异常情况。

对捕获数据库异常的最佳 pragmatic 方法是测试您的异常方案的应用程序。确定可能为您的代码的操作发生的异常,并强制发生异常。然后检查跟踪输出发现引发异常,或检查在调试器中返回的错误信息。这将通知您后者返回您为异常方案会看到您使用的代码。

dab72500823748b02484c76ea98c4c4c.gif用于 ODBC 异常的错误代码

除了返回框架中定义的代码,所以窗体 AFX_SQL_ERROR_XXX的名称,某些 CDBExceptions 基于 ODBC 返回代码。此类异常的返回代码具有窗体 SQL_ERROR_XXX的名称。

返回代码 —结构定义和 ODBC 定义 —该数据库类可能返回。类下 CDBException的 m_nRetCode 数据成员。附加有关 MSDN Library 返回 ODBC 定义的代码可在 ODBC SDK programmer's reference。

dab72500823748b02484c76ea98c4c4c.gif用于 DAO 异常的错误代码

对于 DAO 异常,更多信息通常可用。通过所捕获的 CDaoException 对象的三个数据成员可以访问错误信息:

m_pErrorInfo 包含指向封装在错误对象的 DAO 的集合的错误信息与该数据库的 CDaoErrorInfo 对象。

m_nAfxDaoError 包含从 MFC DAO 类的一个扩展的错误代码。这些错误代码,但窗体 AFX_DAO_ERROR_XXX的名称,文档在 CDaoException的数据成员下。

m_scode 包含从 DAO 的 OLE SCODE ,如果适用)。但您很少需要此错误代码,。通常更多信息可在其他两个数据成员。有关更多参见数据成员有关 SCODE 值。

有关 DAO 错误、 DAO 错误对象类型和 DAO 错误集合的附加信息可以在类 CDaoException下。

数据库异常处理的示例

下面的示例尝试构造 CRecordset- 堆上派生的对象。 new 运算符,然后打开记录集 (对于 ODBC 数据源)。有关 DAO 类的类似示例,请参见 “DAO 异常示例”下面。

dab72500823748b02484c76ea98c4c4c.gifODBC 异常示例

打开 成员函数可能会引发异常 (ODBC 类的类型 CDBException ),因此, 打开 调用与 try 的此代码括号块。后续 catch 块捕捉 CDBException。可以检查异常对象,调用 e,但是,在本例中它是已知的足够尝试创建记录集失败。catch 块显示消息框并通过删除记录集对象清理。

CRecordset* CMyDatabaseDoc::GetRecordset()

{

CCourses* pSet = new CCourses(&m_dbCust);

try

{

pSet->Open();

}

catch(CDBException* e)

{

AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);

// Delete the incomplete recordset object

delete pSet;

pSet = NULL;

e->Delete();

}

return pSet;

}

dab72500823748b02484c76ea98c4c4c.gifDAO 异常示例

DAO 的示例类似于 ODBC 的示例,但是,您通常可以检索更多信息。下面的代码还尝试打开记录集。如果该尝试引发异常,可以检查异常对象的数据成员错误信息。与前面的 ODBC 示例,其足以可能知道尝试创建记录集失败。

CDaoRecordset* CMyDaoDatabaseDoc::GetRecordset()

{

CDaoRecordset* pSet = new CCustSet(&m_db);

try

{

pSet->Open();

}

catch(CDaoException* pe)

{

AfxMessageBox(pe->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);

// Delete the incomplete recordset object

delete pSet;

pSet = NULL;

pe->Delete();

}

return pSet;

}

此代码从异常对象的 m_pErrorInfo 成员获取错误消息的字符串。,在引发异常时, MFC 加载此成员。

有关错误信息的讨论由 CDaoException 对象返回,请参见类 CDaoException 和 CDaoErrorInfo。

当您使用 Microsoft Jet (.mdb) 数据库,,并在许多情况下,当使用 ODBC 时,只有一错误对象。在极少数情况下,当您使用 ODBC 数据源,而具有多个错误,可以通过 DAO 的基于 CDaoException::GetErrorCount返回的错误数的错误集合循环。每次通过循环,请调用 CDaoException::GetErrorInfo 重新填充 m_pErrorInfo 数据成员。

请参见

概念

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值