频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

MS SQL Server MFC DAO 类和 MFC ODBC 类:我使用哪个类集?

来源:赛迪网技术社 作者: 出处:巧巧读书 2007-04-13 进入讨论组
上一页 1 2 3 4 5 

精华网络内容 :http://www.qqread.com/network/

dao 数据库类的数据源选项

现在我们要谈的是您可以用 dao 数据库类连接的数据源、列的静态绑定、列的动态绑定,以及记录的双缓冲。

既然 microsoft access 数据库是 jet 的本机数据库,您自然就可以以最快速度访问它们。microsoft access 97 具有的数据库格式是 dao 3.5 版的本机数据库格式。如果使用 microsoft access 97 数据库,将获得最为快速的性能。

jet 使用单独的 dll 提供对 microsoft jet 1.x 和 2.0 版数据库的访问权限。存储引擎和格式完全是用 microsoft jet 3.0 版修订的。假如更改之处很多,microsoft jet 3.0 版就会将 2.0 版数据库视为外部 isam,这会影响性能。因此,这也是促使您应该考虑将 microsoft access 数据库升级的合理原因。

另外,您还可以访问可安装的 isam 数据库和 odbc 数据源。isam(基于索引的连续访问方法)数据库,如 foxpro 和 dbase,可以直接打开,也可以链接到 access 数据库以实现最佳性能。下面是 dao 可以访问的数据源的列表:

microsoft foxpro 的 2.0、2.5 和 2.6 版。在 3.0 版中可以导入与导出数据,但不能创建对象。

dbase iii、dbase iv 和 dbase 5.0

paradox 的 3.x、4.x 和 5.x 版

btrieve 的 5.1x 和 6.0 版

microsoft excel 的 3.0、4.0、5.0、7.0 和 8.0 版工作表

lotus wks、wk1、wk3、wk4 电子表格

文本文件  

请记住,microsoft access 的 1.x、2.0 和 7.0 版数据库都属于此类别。

可以通过 odbc 访问 odbc 数据源,如 sql serveroracle,因此您可以选择针对这些数据源使用 dao。一个 odbc 数据源可以来自任何 dbms,只要您拥有该 dbms 的适当的 odbc 驱动程序。对于 visual c++ 2.0 版或更高版本,您需要 32 位的 odbc 驱动程序(但 win32 除外,在 win32 中需要 16 位的 odbc 驱动程序)。下面是此版本 visual c++ 所包含的 odbc 驱动程序列表。

sql server

microsoft access

microsoft foxpro

microsoft excel

dbase

paradox

文本文件  

microsoft desktop database drivers 3.0 版(它包含列表中的最后六项)为这些数据源提供最佳性能。这些只限 32 位驱动程序。

将外部数据源(如 sql server)链接到 microsoft access 表是最有效的处理数据访问的方法。在将应用程序连接到远程数据源以前,必须先确保应用程序的用户可以访问远程数据,并且确保正确地设计您的应用程序,以解决远程数据源安全性难题。另外,您还必须确保应用程序能够正确地与区分大小写的数据源进行交流,并且确保正确地初始化可安装的 isam,以用于您想访问的数据源。最后,您必须检查您的代码,以确保在访问非 jet 数据源时,代码没有使用 microsoft jet 数据源专用的对象或调用。

设置链接最简捷的方法是:进入 microsoft access。如果用的是 microsoft access 2.0 版,则使用“文件”/“附加表”命令;如果用的是 microsoft access 95 和 microsoft access 97,则使用“文件”/“获取外部数据”/“链接表”命令。

连接信息存储在您所使用的基本表 (.mdb) 中。如果移动了外部数据的位置,就必须在 microsoft access 中或从代码中调用 cdaotabledef::refreshlink,重新建立链接。

dao 记录字段交换机制与在基于 odbc 的数据库类中的 rfx 有着相同的工作方式。记录集对象的字段数据成员如果联系在一起,就形成一个“编辑缓冲区”,以保存一个记录的选定列。当记录集第一次打开并要读取第一条记录时,dfx 就会将每个选定列与适当字段数据成员的地址绑定(关联)在一起。当记录集更新一条记录时,dfx 调用 dao 以向数据库引擎发送适当的命令。dfx 利用它对字段数据成员所了解的内容,指定要写入的数据源中的列(字段)。

向导支持列的静态绑定。您可以添加自己的 dfx 调用,就象使用基于 odbc 的类时那样。首先,对于每个绑定字段和参数,都必须将成员添加到 cdaorecordset 派生的类中。接下来,cdaorecordset::dofieldexchange 应被替代。请注意,成员的数据类型很重要。它应与来自数据库字段中的数据匹配,或者至少可转换成那种类型。mfc technical #53 更详细地讲述了此过程。

cdaofieldexchange 类支持由 dao 数据库类使用的 dao 记录字段交换 (dfx) 例程。如果您正在编写自定义数据类型的数据交换例程,则使用该类。cdaofieldexchange 对象提供发生 dao 记录字段交换所需要的上下文信息。cdaofieldexchange 对象支持许多操作,包括绑定参数和字段数据成员,以及在当前记录的字段上设置各种标志。

dao 数据库类中的动态绑定

如果可以用基于 odbc 的类动态绑定列,对这种行为的支持就不会内置于 mfc 类中。动态绑定会内置在 dao 数据库类中,而且执行起来相当容易。

还可以做一些其它的事情以优化性能,如检索记录的一部分而不是整个记录。在本陈述的稍后部分中,我们将提供一些可以优化应用程序的方法。

dfx 和动态绑定不是互相排斥的选择方案。通过 dao 数据库类,可以将静态和动态绑定调用混合,以实现最大效率。

dao 数据库类中的双缓冲

在 mfc 的 cdaorecordset 类中,双缓冲是一种当记录集内的当前记录发生更改时简化检测的机制。当添加新记录和编辑现有记录时,对您的 dao 记录集使用双缓冲会减少必需的工作量。默认情况下,您的 mfc dao 记录集保留编辑缓冲区的第二份副本(记录集类的字段数据成员,全体复制;dao“帮助”中称相应的缓冲区为“复制缓冲区”)。当您对数据成员进行更改时,mfc 会拿它们与副本(“双缓冲区”)进行比较以检测更改。

双缓冲的代用方法 - 不保留数据的副本 - 当编辑当前记录的字段时,要求您进行其它函数调用。

双缓冲一直是基于 odbc 的数据库类的一部分。对于 dao 数据库类,如果需要,您可以停用该机制以提高效率。

该机制的主开关名为 m_bcheckcachefordirtyfields,dirty 意思是“已更改”。如果将此开关置于 on(开),就可以对全部或部分字段启用双缓冲。如果该主开关是 off(关),就会禁用整个双缓冲机制。

您最想关闭其双缓冲的字段包括备注字段、图片字段,以及其它 blob(大型二进制对象)。

dao sdk 中含有一些 c++ 数据库类,这些类彼此独立,而且不同于 mfc dao 数据库类。这些 c++ 类将单个对象封装到 dao 层次结构中。虽然您可以将 dao sdk c++ 类与 mfc dao 数据库类混合,但 dao sdk c++ 类不遵循操作符超载的 mfc 准则,并且在混合使用这些类时您必须当心。有关的详细信息,请参阅 microsoft systems journal(1999 年 6 月)中的文章“the dao of databases:using data access objects and the jet engine in c++”。 更多文章 更多内容请看SQL Server 数据处理专题SQL Server 索引和查询专题SQL Server专题,或进入讨论组讨论。
上一页 1 2 3 4 5 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章