要在访问数据时判断出应该使用哪一种技术,这并不容易。可能需要公用实用程序来处理多个数据库类型;部分数据可能出现在本地硬盘驱动器上,部分在网络上,还有一部分在主机上。甚至客户安装在设备上的产品也会使这种选择更加困难。例如,你所期待的ODBC 支持级别也许依赖于所安装的Microsoft Office 的版本,因为这个产品不提供ODBC 支持。你还会发现,ADO 类提供的对象和方法要比ODBC 类多。ADO 可以提供程序中绝对必须具有的一些特性——例如,你会发现OLE-DB 和ADO 两者都支持DFX_Currency,但在ODBC中没有对应的功能——但你要想掌握它们也必须付出一定的努力。 ============================================================================
注 使用ADO 而不是ODBC 的一个原因是,ADO 提供的对象和方法比ODBC 多。 ============================================================================
选择OLE-DB 或ODBC 时,有几条一般的规则。因为ADO 实际上只是OLE-DB 的包装,所以这些规则也适用于它。下面提供一些基本的原则,可以用来帮助你决定选择OLE-DB还是ODBC。 · 非OLE 环境 如果要访问支持ODBC 的数据库,而该数据库又在不支持OLE 的服务器上,那么ODBC 是最好的选择。 IN2qb*lT@s
· 非SQL 环境 ODBC 在处理SQL 时非常出众。处理非SQL 数据库时,OLE-DB则具有非常明显的优势。
· OLE 环境 对支持OLE 的服务器来说,选择OLE-DB 还是ODBC 也许是希望各半。如果有ODBC 驱动程序可供利用,那么使用ODBC 是一个好主意;否则,就只有选择OLE-DB了。
· 所需的互操作性 如果需要可互操作的数据库部件,那么只有选择OLE-DB。
其它的问题往往是复合问题,或者至少是失去了可以用来区别这两种技术的方便的规则。例如,有一些特征是ADO 和ODBC 所共有的。其中一个特征是,Visual C++允许你直接访问任一种技术。这意味着,可以完全访问ADO 和ODBC 都提供的每一个特征(是的,这确实不错,但也有缺陷,因为谈到访问,不能说一种技术明显地优于另一种技术)。
如果做了错误的决定,一些熟悉的技术实际上会帮助你把应用程序从ODBC转移到ADO,或反方向转移。两种技术都依靠数据库对象来管理基础的DBMS,而记录集对象则包含针对DBMS 的查询结果。另外,ODBC 和ADO 都以相似
的成员来使用数据库和记录集对象。即使要对类和成员名称做一些更改,你仍会发现,ODBC 和ADO程序设计的代码非常相似。
ODBC 和ADO 都依靠外部驱动程序来完成任务。但是,用ADO 还可以从Microsoft Jet 引擎获得额外的帮助。这个额外的支持是如何使程序设计更加容易的呢?考虑一下,要在哪里执行两个依赖不同引擎的数据库的外部连接。在ODBC 下,必须人工执行全部所需的设置。使用ADO 意味着,Microsoft Jet 引擎会为你执行这些设置。可惜的是,让ADO 做这个工作意味着会失去控制级别和一些灵活性,而这正是你从一开始就想用C++获取数据的原因。 ============================================================================
注 ODBC 和ADO 具有相似的特征,如记录集和数据库对象,尽管MFC 利用这些对象的方式完全不同。
============================================================================
有一个地方绝对不能使用ADO。如果要访问16 位数据,就不能用ADO。不管你怎么想,都必须用ODBC。然而,几乎没有人还在使用16 位数据库了。大多数的新工程都会使用32 位接口,这意味着会有一个选择。老的工程已经有了嵌入代码的数据访问方法,所以你也实在没有必要在这里做决定。ODBC 的一点不足是,不能像以前使用ADO 那样跟踪事务。以Microsoft Jet引擎使用ADO 时,应该得到事务的工作区级的支持。ODBC 只提供数据库级的事务支持,这就是说,可以从几个不同的工作区跟踪事务(这使得调试非常困难,还可能导致其它类型的问题)。
============================================================================
注释 处理ODBC 数据库时,ADO 提供数据库级的支持;这和ODBC 提供的支持层次是相同的。除非你使用Microsoft Jet 引擎,否则得不到工作区级事务支持的好处。
============================================================================
当然了,每个人有自己的开发设计规范与习惯,选择什么样的数据库开发方式还是自己的知识做保证。