一个常见数据库操作错误的分析(五)

前面我提到了目前存在OLE-DB,ADO和ODBC这些技术,那么一个很自然的问题就是,在什么情况下该使用什么技术了,请看下面的一片介绍:

什么时候应该使用OLE-DB,ADO或ODBC

 要在访问数据时判断出应该使用哪一种技术,这并不容易。可能需要公用实用程序来处理多个数据库类型;部分数据可能出现在本地硬盘驱动器上,部分在网络上,还有一部分在主机上。甚至客户安装在设备上的产品也会使这种选择更加困难。例如,你所期待的ODBC支持级别也许依赖于所安装的MicrosoftOffice的版本,因为这个产品不提供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是最好的选择。
    非SQL环境 ODBC在处理SQL时非常出众。处理非SQL数据库时,OLE-DB则具有非常明显的优势。
    OLE环境 对支持OLE的服务器来说,选择OLE-DB还是ODBC也许是希望各半。如果有ODBC驱动程序可供利用,那么使用ODBC是一个好主意;否则,就只有选择OLE-DB了。
    所需的互操作性 如果需要可互操作的数据库部件,那么只有选择OLE-DB。
    其它的问题往往是复合问题,或者至少是失去了可以用来区别这两种技术的方便的规则。例如,有一些特征是ADO和ODBC所共有的。其中一个特征是,VisualC++允许你直接访问任一种技术。这意味着,可以完全访问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引擎,否则得不到工作区级事务支持的好处。

请注意刻意表示出来的一些关键词,可以发现由于“Microsoft Jet引擎”使得工作变得简单,同时也更加依赖Microsoft了。

最后还是要澄清几个概念:

OLE DB是一种技术标准,目的是提供一种统一的数据访问接口,这里所说的“数据”,除了标准的关系型数据库中的数据之外,还包括邮件数据、Web上的文本或图形、目录服务(DirectoryServices),以及主机系统中的IMS和VSAM数据。OLE DB标准的核心内容就是要求以上这些各种各样的数据存储(DataStore)都提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。

微软的OLE (现在的Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术,这些又是什么,继续找资料……

posted on 2006-02-19 00:54  爱你一万年123  阅读(105)  评论(0编辑  收藏  举报

导航