TN055:迁移MFC ODBC数据库到MFC DAO选件类的选件类应用程序

备注

从 Visual C++ .NET 起,Visual C++ 环境和向导不再支持 DAO(不过提供了 DAO 类,仍可供您使用)。Microsoft 建议对新项目使用 OLE DB 模板ODBC 和 MFC 。DAO 只应用于维护现有的应用程序。

概述

在许多情况下迁移使用 MFC ODBC 数据库类为 MFC DAO 数据库类的应用程序可能需要的。 此方法声明将详细大多数 MFC ODBC 和 DAO 类之间的区别。 如果需要记住差异,迁移从 ODBC 类的应用程序到 MFC 类不应停止困难。

为什么从 ODBC 迁移到 DAO?

有很多原因可能要迁移从 ODBC 数据库类的应用程序到 DAO 数据库类,但是,决定不一定是简单或透明的。 需要注意的一点是 DAO 使用的 Microsoft Jet 数据库引擎可以读取您有一个 ODBC 驱动程序的任何 ODBC 数据源。 可能更有效地使用 ODBC 数据库类或直接调用 ODBC hello,但是, Microsoft Jet 数据库引擎可以读取 ODBC 数据源。

ODBC/DAO 做出决策简单的一些简单的情况。 例如,在中,在 Microsoft Jet 引擎可以直接读取的格式只需对数据的访问 (访问格式, Excel 格式,等等) 清单的选择是使用 DAO 数据库类。

,当您的数据存在服务器或于多种不同的服务器,较复杂的情况下出现。 在这种情况下,使用 ODBC 数据库类或 DAO 数据库类的决定是一个困难一个。 如果要使与不同的操作连接 (联接来自服务器的数据。 (如 SQL Server 和 Oracle 的多种格式),则 Microsoft Jet 数据库引擎会执行您的连接而不是强制您完成必要中的工作是否使用了 ODBC 数据库类或直接调用 ODBC。 如果您使用支持驱动游标的 ODBC 驱动程序,则最好的选择可能是 ODBC 数据库类。

选择可能会很复杂,因此,您可能需要编写测试一些示例的代码出自的各种方法性能您的特定需求。 此方法声明,假设决定从 ODBC 数据库类迁移到 DAO 数据库类。

在 ODBC 数据库类和 MFC DAO 数据库类之间的相似之处

MFC ODBC 类的原始模型基于正在使用 Microsoft Access 和 Microsoft Visual Basic 的 DAO 对象模型。 这意味着具有 ODBC 的许多常用功能,并且 MFC DAO 类,所有在本节中不会列出任何控制器。 通常,编程模型是相同的。

演示一些相似之处:

  • ODBC 和 DAO 类具有使用基础数据库管理系统的数据库对象 (dbms),管理。

  • 两个具有表示的记录集对象从该 DBMS 返回的结果集。

  • DAO 数据库和记录集对象具有成员基本相同访问 ODBC 类。

  • 两个设置类,用于检索数据的代码是相同的 (这些对象和成员名称更改。 需要更改,但通常,此过程比较直接的名称更改,当切换到从 ODBC 类 DAO 类时。

例如,在两个模型检索数据的过程是创建并打开数据库对象,创建并打开记录集对象与通过导航 (移动) 执行某项操作的数据。

ODBC 和 MFC DAO 类之间的区别

DAO 类包含多个对象和一个更为丰富的方法,但是,本节将只详细介绍类似的类和函数之间的差异。

可能类之间最明显的区别在于类似的类和全局函数的名称更改。 下面的列表显示对象、方法和全局函数的名称更改与数据库类:

类或函数。

在 MFC DAO 类的等效

CDatabase

CDaoDatabase

CDatabase::ExecuteSQL

CDaoDatabase::Execute

CRecordset

CDaoRecordset

CRecordset::GetDefaultConnect

CDaoRecordset::GetDefaultDBName

CFieldExchange

CDaoFieldExchange

RFX_Bool

DFX_Bool

RFX_Byte

DFX_Byte

RFX_Int

DFX_Short

RFX_Long

DFX_Long

 

DFX_Currency

RFX_Single

DFX_Single

RFX_Double

DFX_Double

RFX_Date *

DFX_Date (基于的COleDateTime)

RFX_Text

DFX_Text

RFX_Binary

DFX_Binary

RFX_LongBinary

DFX_LongBinary

* RFX_Date  功能可以根据 CTimeTIMESTAMP_STRUCT

对可能会影响您的应用程序并想求得更多的功能的主要更改比简单名称更改下面列出。

  • 使用的常数和宏指定与记录集的内容打开类型,并更改记录集打开选项。

    ODBC 类必需的 MFC 通过宏或枚举类型定义这些选项。

    DAO 类, DAO 提供这些选项的定义在头文件 (DBDAOINT.H)。 因此记录集类型是 CRecordset的一个枚举成员,但是,使用 DAO 它是常数。 如您将使用 snapshot ,指定 CRecordset 的类型在 ODBC,但 DB_OPEN_SNAPSHOT 时,指定 CDaoRecordset时的类型。

  • CRecordset 的默认记录集类型是 snapshot ,当 CDaoRecordset 的默认记录集类型是 dynaset 时 (对于其他请参见下面的说明问题有关 ODBC 类快照)。

  • ODBC CRecordset 类具有创建一个的选项提供一个向前记录集类型。 在 CDaoRecordset 类,仅向前记录集,不是类型,而是属性 (或可选) 记录集的某些类型。

  • 一个追加记录集,在打开 CRecordset 对象表示记录集的数据可以读取和追加。 CDaoRecordset 对象,则追加选项按原义表示记录集的数据只能追加 (和不阅读)。

  • ODBC 类的事务成员函数是 CDatabase 的成员并充当数据库级别。 DAO 类,事务成员函数是较高级别的类 (CDaoWorkspace) 的成员和从而可能影响共享同一工作区 (事务空格) 的多个 CDaoDatabase 对象。

  • 更改了异常类。 CDBExceptions 在 ODBC 类和 CDaoExceptions 引发 DAO 类。

  • ,当 DFX_Date 使用 COleDateTime时,RFX_Date 使用 CTimeTIMESTAMP_STRUCT 对象。 COleDateTime 与几乎完全相同的。 CTime,但是,根据一个 8 字节 OLE 日期 而非 4 字节 time_t ,以便它可以保存数据的一个更大的范围。

    备注

    DAO (CDaoRecordset) 快照是只读的,在 ODBC (CRecordset) 时快照可能是可更新根据 ODBC 游标库的驱动程序和使用。如果使用游标库, CRecordset 可更新快照。如果您使用任何一个从桌面驱动程序 pack 3.0 的 Microsoft 驱动程序,而无需 ODBC 游标库, CRecordset 快照是只读的。如果使用另一个驱动器上,请检查驱动程序的文档查看快照 (STATIC_CURSORS) 是否为只读。

请参见

其他资源

由Number "技术说明

技术说明按类别