CDaoException 类

表示由基于数据访问对象 (DAO) 的 MFC 数据库类引起的异常条件。 DAO 3.6 是最终版本,被视为已过时。

语法

class CDaoException : public CException

成员

公共构造函数

名称 描述
CDaoException::CDaoException 构造 CDaoException 对象。

公共方法

名称 描述
CDaoException::GetErrorCount 返回数据库引擎的错误集合中的错误数。
CDaoException::GetErrorInfo 返回有关错误集合中特定错误对象的错误信息。

公共数据成员

“属性” 描述
CDaoException::m_nAfxDaoError 包含 MFC DAO 类中任何错误的扩展错误代码。
CDaoException::m_pErrorInfo 指向 CDaoErrorInfo 对象的指针,该对象包含有关一个 DAO 错误对象的信息。
CDaoException::m_scode 与错误相关的 SCODE 值。

注解

该类包含可用于确定异常原因的公共数据成员。 CDaoException 对象由 DAO 数据库类的成员函数构造和引出。

注意

DAO 数据库类不同于基于开放式数据库连接 (ODBC) 的 MFC 数据库类。 所有 DAO 数据库类名都具有“CDao”前缀。 你仍然可以使用 DAO 类访问 ODBC 数据源。 通常,基于 DAO 的 MFC 类比基于 ODBC 的 MFC 类更强大;基于 DAO 的类可以通过它们自己的数据库引擎访问数据,包括通过 ODBC 驱动程序。 基于 DAO 的类还支持数据定义语言 (DDL) 操作(例如通过类添加表),而无需直接调用 DAO。 有关 ODBC 类引发的异常的信息,请参阅 CDBException

可以在 CATCH 表达式的范围内访问异常对象。 还可以使用 AfxThrowDaoException全局函数从自己的代码中引出 CDaoException 对象。

在 MFC 中,所有 DAO 错误都表示为类型为 CDaoException 的异常。 捕获此类型的异常时,可以使用 CDaoException 成员函数从数据库引擎的错误集合中存储的任何 DAO 错误对象中检索信息。 每发生一个错误,会将一个或多个错误对象放置在错误集合中。 (该集合通常只包含一个错误对象;如果使用 ODBC 数据源,则更有可能获取多个错误对象。)当另一个 DAO 操作生成错误时,将清除错误集合,并将新的错误对象放置在错误集合中。 不生成错误的 DAO 操作对错误集合没有影响。

有关 DAO 错误代码,请参阅文件 DAOERR.H。 要了解相关信息,请参阅 DAO 帮助中的主题“可捕获数据访问错误”。

有关常规异常处理或 CDaoException 对象的详细信息,请参阅文章异常处理 (MFC) 异常:数据库异常。 第二篇文章包含演示 DAO 中的异常处理的示例代码。

继承层次结构

CObject

CException

CDaoException

要求

标头:afxdao.h

CDaoException::CDaoException

构造 CDaoException 对象。

CDaoException();

备注

通常,当框架的代码引发异常时,框架会创建异常对象。 你很少需要显式构造异常对象。 如果要从自己的代码中引发 CDaoException,请调用全局函数 AfxThrowDaoException

但是,如果要通过 MFC 类封装的 DAO 接口指针直接调用 DAO,则可能需要显式创建异常对象。 在这种情况下,可能需要从 DAO 检索错误信息。 假设通过 DAODatabases 接口对工作区的数据库集合调用 DAO 方法时,DAO 中出现了一个错误。

检索 DAO 错误信息
  1. 构造一个 CDaoException 对象。

  2. 调用异常对象的 GetErrorCount 成员函数来确定数据库引擎的错误集合中的错误对象数。 (通常只有一个,除非使用的是 ODBC 数据源。)

  3. 调用异常对象的 GetErrorInfo 成员函数,通过异常对象按集合中的索引一次检索一个特定的错误对象。 将异常对象视为一个 DAO 错误对象的代理。

  4. 检查 GetErrorInfom_pErrorInfo 数据成员中返回的当前 CDaoErrorInfo 结构。 其成员提供有关 DAO 错误的信息。

  5. 对于 ODBC 数据源,根据需要重复步骤 3 和 4,以获取更多错误对象。

  6. 如果在堆上构造了异常对象,则在完成后使用 delete 运算符将其删除。

有关处理 MFC DAO 类中的错误的详细信息,请参阅异常:数据库异常一文。

CDaoException::GetErrorCount

调用此成员函数,以检索数据库引擎的错误集合中的 DAO 错误对象的数量。

short GetErrorCount();

返回值

数据库引擎的错误集合中的 DAO 错误对象数。

注解

此信息可用于循环访问错误集合以检索集合中的每个 DAO 错误对象。 若要按索引或 DAO 错误编号检索错误对象,请调用 GetErrorInfo 成员函数。

注意

通常,错误集合中只有一个错误对象。 但是,如果使用的是 ODBC 数据源,则可能存在多个数据源。

CDaoException::GetErrorInfo

返回有关错误集合中特定错误对象的错误信息。

void GetErrorInfo(int nIndex);

参数

nIndex
数据库引擎的错误集合中错误信息的索引,用于按索引查找。

备注

调用此成员函数以获取有关异常的以下信息类型:

  • 错误代码

  • 说明

  • 帮助文件

  • 帮助上下文

GetErrorInfo 将信息存储在异常对象的 m_pErrorInfo 数据成员中。 有关返回的信息的简要说明,请参阅 m_pErrorInfo。 如果捕获 MFC 引发的 CDaoException 类型的异常,则 m_pErrorInfo 成员将已填充。 如果选择直接调用 DAO,你必须自行调用异常对象的 GetErrorInfo 成员函数来填充 m_pErrorInfo。 有关更详细的说明,请参阅 CDaoErrorInfo 结构。

有关 DAO 异常的信息以及代码示例,请参阅异常:数据库异常一文。

CDaoException::m_nAfxDaoError

包含 MFC 扩展错误代码。

注解

当 MFC DAO 类的特定组件出错时会提供此代码。

可能的值有:

  • NO_AFX_DAO_ERROR 最近的操作未导致 MFC 扩展错误。 但是,该操作可能已从 DAO 或 OLE 生成其他错误,因此应检查 m_pErrorInfo,可能还需要检查 m_scode

  • AFX_DAO_ERROR_ENGINE_INITIALIZATION MFC 无法初始化 Microsoft Jet 数据库引擎。 OLE 可能未能初始化,或者可能无法创建 DAO 数据库引擎对象的实例。 这些问题通常表明 DAO 或 OLE 安装不正确。

  • AFX_DAO_ERROR_DFX_BIND DAO 记录字段交换 (DFX) 中使用的地址函数调用不存在或无效(地址未用于绑定数据)。 你可能在 DFX 调用中传递了错误的地址,或者 DFX 操作之间的地址可能已无效。

  • AFX_DAO_ERROR_OBJECT_NOT_OPEN 你尝试基于未处于打开状态的 querydef 或 tabledef 对象打开记录集。

CDaoException::m_pErrorInfo

包含指向 CDaoErrorInfo 结构的指针,该结构提供有关上次通过调用 GetErrorInfo 检索到的 DAO 错误对象的信息。

注解

此对象包含下列信息:

CDaoErrorInfo 成员 信息 含义
m_lErrorCode 错误代码 DAO 错误代码
m_strSource Source 最初生成错误的对象或应用程序的名称
m_strDescription 说明 与错误关联的描述性字符串
m_strHelpFile 帮助文件 Windows 帮助文件的路径,用户可以在其中获取有关问题的信息
m_lHelpContext 帮助上下文 DAO 帮助文件中主题的上下文 ID

有关 CDaoErrorInfo 对象中包含的信息的完整详细信息,请参阅 CDaoErrorInfo 结构。

CDaoException::m_scode

包含描述错误的 SCODE 类型的值。

备注

这是一个 OLE 代码。 你很少需要用到此值,因为几乎在所有情况下,其他 CDaoException 数据成员中都会提供更具体的 MFC 或 DAO 错误信息。

有关 SCODE 的信息,请参阅 Windows SDK 中的“OLE 错误代码的结构”主题。 SCODE 数据类型映射到 HRESULT 数据类型。

另请参阅

CException 类
层次结构图
CException 类