odbc ado dao rdo 的相关评论

来源:互联网 发布:刘宇昆 爱的算法pdf 编辑:程序博客网 时间:2024/04/30 21:32
简单地说一下:  
  ODBC执行效率最高,可与C类比  
  ADO对ODBC进行了封装,效率稍低些,但功能/代码比最高,一般都用这个东西,可与C++类比  
  DAO   ……   好象是一种比较落后的技术了,反正我是没用过。


 ODBC是Microsoft的基于关系数据库一种互连技术,它只能访问关系数据库,如果使用SQLAPI进行编程,效率较好,但代码较多,如果使用MFC   ODBC封装的类进行访问比较简单。  

    ADO是一种基于COM的数据库访问技术,可以访问关系数据库与非关系数据库,由于它是基于COM的,访问速度也较快,占用资源较小。  
  DAO是Microsoft一种用来访问Jet引擎的方法,主要用来访问Access数据库,使用起来比较简单。  
    如果你想看这几种方法的详细说明与区别,可以参考开发文档中的几篇数据库访问的文章。.



ODBC(开放数据库互连)和ADO(ActiveX数据对象)。介绍这两种类型的访问方法,但我想你会发现,ADO方法是针对新的程序设计 情形而采用的。它克服了早期技术的诸多限制,依赖于Microsoft新的底层访问方法OLE-DB(对象链接和嵌入数据库)。

 注 ODBC通常用来访问不具备OLE-DB特性的非Microsoft数据库中的数据;16位的ODBC驱动程序工作起来可能非常缓慢。

  ODBC素以最慢的数据访问方法而著称,但是很可惜,当ADO或DAO都不支持某个数据库管理器而ODBC支持这个数据库管理器时,在这种特定的情形 下,你仍然需要使用ODBC。在大多数情况下,这意味着要从数据库厂商那里获得所需的驱动程序,虽然Visual C++确实附带了一些产品的驱动程序(如果你正在使用数据库管理器的某些神秘功能,那么就需要建立自己的接口棗这并不是一件十分困难的事)。本质上讲,你 总是要使用ODBC来访问Microsoft产品之外的其它DBMS产品所创建的数据库,这些数据库并不具备OLE-DB功能。ODBC还要求做一些额外 的工作棗为ADO调整Visual C++中的大部分向导。

除了使用ADO和ODBC外,你还可以使用像DAO(数据访问对象)这样的早期技术,该技术包含在像Access这样的Microsoft产品中。DAO 依赖于用Microsoft Access自动获得的Microsoft Jet数据库引擎。DAO还是较早版的Visual Basic所使用的引擎(最新版的Visual Basic和Visual C++依赖于相同的ADO/OLE-DB组合),所以如果需要支持较早的Visual Basic应用程序,那么DAO仍是一个不错的选择。


  尽管Microsoft文件声明,可以用DAO访问非Microsoft产品建立的数据库,但你仍会发现,在这种情况下,使用ADO和ODBC要好得 多。这样的话,不但兼容性问题会少一些,速度也将有所提高,因为数据请求经过的接口层减少了。有一条经验要记住,DAO是设计用来处理MDB文件的。



ADO和DAO的主要区别是:  
        DAO   的设计思想使用一种接口来访问多种类型的数据。它在处理时使用Microsoft.Jet接口的ODBC数据源。DAO.Jet数据库服务的最独特的方面 就是它有自己的查询引擎。但它的最大弱点是由于查询服务运行于本地机上,这就意味着在处理任何远程数据请求之前,必须把所有的数据都传输到本地

工作站上,但在低速连接中调用大量数据时这是一个缺点。另外的一个缺点是它不“认识”Internet,DAO.Jet   服务是为单机和局域网(LAN)开发的。  
      ADO和DAO的最大区别是ADO使用OLEDB接口而非ODBC作为底层数据供应者的。依靠OLEDB,ADO也能够支持对非SQL数据存储的纪录集访 问,如Email和网络目录服务。OLEDB提供了比ODBC更多的灵活性和易用性。OLEDB服务的内部设计使得它能存取标准SQL类型的数据那样容易 的访问非SQL数据存储。OLEDB的一个关键特性是它可以提供对描述性数据存储的处理。通过提供某种方法来描述数据存储方式,OLEDB可以对以任何格 式存储的数据和以任何方法执行的查询提供访问途径。由于OLEDB并不要求所有数据存储都以表格、行和列的形式出现。所以与ODBC相比,它适用于更多的 数据存储类型。 


用ODBC需要建一个ODBC数据源(用控制面板的ODBC管理器,或者程序中动态做都可以),然后程序中使用这个数据源。  
  连SQL   Server的话,建议使用ODBC(如果用MFC,可以使用MFC对ODBC的封装类CDatabase和CRecordset等),或者ADO。


以下是微软的解释  
  What   Are   DAO   and   ODBC?  
  Home   |     Overview   |     How   Do   I   |     FAQ       |     ODBC   Driver   List  
   
  Both   Data   Access   Objects   (DAO)   and   Open   Database   Connectivity   (ODBC)   are   application   programming   interfaces   (APIs)   that   give   you   the   ability   to   write   applications   that   are   independent   of   any   particular   database   management   system   (DBMS).  
   
  DAO   is   familiar   to   database   programmers   using   Microsoft   Access   Basic   or   Microsoft   Visual   Basic.   DAO   uses   the   Microsoft   Jet   database   engine   to   provide   a   set   of   data   access   objects:   database   objects,   tabledef   and   querydef   objects,   recordset   objects,   and   others.   DAO   works   best   with   .MDB   files   like   those   created   by   Microsoft   Access,   but   you   can   also   access   ODBC   data   sources   through   DAO   and   the   Microsoft   Jet   database   engine.  
   
  ODBC   provides   an   API   that   different   database   vendors   implement   via   ODBC   drivers   specific   to   a   particular   database   management   system   (DBMS).   Your   program   uses   this   API   to   call   the   ODBC   Driver   Manager,   which   passes   the   calls   to   the   appropriate   driver.   The   driver,   in   turn,   interacts   with   the   DBMS   using   Structured   Query   Language   (SQL).  
   
  Note       As   a   major   part   of   the   Microsoft   Windows   Open   Standards   Architecture   (WOSA),   ODBC   is   here   for   the   long   run.   DAO   is   optimized   around   the   Microsoft   Jet   database   engine,   but   you   can   still   access   ODBC   and   other   external   data   sources   via   that   engine,   and   the   distinct   ODBC   API   and   the   MFC   classes   based   on   it   are   still   available   and   still   have   their   role   to   play   in   your   selection   of   database   tools. 

当然是用ADO好,优点是速度快,使用方便,省略了很多细节!  
  这也是大势所趋呀!  
  因为我对ADO较熟,这是我写的一点小东西:  
  三.ADO(ActiveX   Data   Object)技术特征  
    3.1   部件对象模型(COM)是Windows平台上的一个通用的接口标准。ADO正是建立在部件对象模型

基础上的一个数据库接口部件,是当前最流行的数据库访问技术。            
  它有以下的特点:  
  l它是基于OLE   DB访问接口的,它对OLE   DB的接口进行了卦装,定义了ADO对象,屏蔽了底层数据库接口之间的差异。属于数据库访问当中的高层接口。  
    lADO有选择的使用不同的底层数据库接口,以提供最高的性能。当数据库供应商提供了符合OLE   DB的数据库驱动程序时,ADO直接使用该驱动程序,这是时效率较高;当不存在这类驱动时,访问ODBC接口,这时效率较低,绝大多数数据库的供应商都提供ODBC的标准数据库驱动。  
  lADO是一个二进制的标准,独立于任何编程语言,只要应用程序使用的语言支持访问COM对象,就可以使用ADO部件操作数据库。  
     
  3.2     ADO接口简介  
    本系统要 用ADO当中的三个基本接口:_ConnectionPtr接口、_CommandPtr接口和、_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。用 _ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数 据输入输出操作。  
  _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以 利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选 择。但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用 _CommandPtr接口执行存储过程和SQL语句。  
    _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr 接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自 己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口,然后使用 _RecordsetPtr执行存储过程和SQL语句。  
  3.3     ADO当中的COM数据类型  
    在ADO当中使用的输入输出数据类型大部分是标准数据类型。但是一些参数(如:数据库字段值,出错处理信息,SQL命令等)必须使用专用的COM数据类型:VARIANT,BSTR,   HRESULT,SAFEARRAY及相关的COM封装类:_variant_t,   _bstr_t   和_com_error。  
  lVARIANT  
  VARIANT是一个结构,该结构的成员包含数据的类型名和数据的取值。VARIANT结构中可以存放各种各样的数据,包括编程语言的各种数据类型。如: 货币,日期,所有的COM接口类型。_variant_t类封装了VARIANT数据类型,并提供了管理VARIANT的方法。在ADO接口操作当中数据 库的操作都是经过_variant_t类封装的VARIANT结构来传递的。  
  lBSTR  
  BSTR是一个包含了字符串长度值及其缓冲区的结构,_bstr_t类封装了BSTR的数据结构和管理该数据的方法。我在ADO接口中字符串的传递就是通过它来传递的!  
  lHRESULT  
  在COM当中,大多数操作要返回一个HRESULT的返回值,用来测定方法调用是否成功。它是一个32位的无符号数。例如:我在进行更新多表的操作时,如 果只对的某一个表进行了更新,而另外的表没有成功执行,类型库的封装程序就会检查到这个值,调用_com_issue_error()方法,抛出相应的 _com_error异常,我们就要对这个异常捕获,并进行相应的处理,否则,就会产生脏数据。 



 ADO   和   RDO、DAO   的比较  
   
   
    ADO   并不是自动和您现存的数据访问应用程序代码兼容的。当   ADO   封装   DAO   和   RDO   的功能性的时候,您必须将许多

语言要素转换为   ADO   语法。在某些情况下,这将意味着您现存代码的某些功能的一个简单转换。在其他情况下,最佳的做法可能是用   ADO   的新功能重写该应用程序。  
   
    DAO   (Data   Access   Objects)   数据访问对象是第一个面向对象的接口,它显露了   Microsoft   Jet   数据库引擎(由   Microsoft   Access   所使用),并允许   Visual   Basic   开发者通过   ODBC   象直接连接到其他数据库一样,直接连接到   Access   表。DAO   最适用于单系统应用程序或小范围本地分布使用。  
   
    RDO   (Remote   Data   Objects)   远程数 据对象是一个到   ODBC   的、面向对象的数据访问接口,它同易于使用的   DAO   style组合在一起,提供了一个接口,形式上展示出所有   ODBC   的底层功能和灵活性。尽管   RDO   在很好地访问   Jet   或   ISAM   数据库方面受到限制,而且它只能通过现存的   ODBC   驱动程序来访问关系数据库。但是,RDO   已被证明是许多   SQL   Server、Oracle   以及其他大型关系数据库开发者经常选用的最佳接口。RDO   提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。  
   
  ADO   是   DAO/RDO   的后继产物。ADO   2.0在功能上与   RDO   更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO   “扩展”了   DAO   和   RDO   所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。例如,ADO   没有与   rdoEngine   和   rdoEnvironment   对象相等同的对象,可以显露   ODBC   驱动程序管理器和   hEnv   接口。尽管事实上您的接口可能是通过   ODBC   OLE   DB   服务提供程序实现的,但您当前也不能从   ADO   中创建   ODBC   数据源。  
   
  包含在   DAO   和   RDO   模型中的许多功能被合并为单个对象,这样就生成了一个简单得多的对象模型。然而,由于这个原因,起初您可能会觉得找到合适的   ADO   对象、集合、属性、方法,或事件非常困难。与   DAO   和   RDO不同的是,尽管   ADO   对象是分层结构的,但在分层结构范围之外也是可以创建的。  
   
  不过,也应当注意,ADO   当前并不支持   DAO   的所有功能。ADO   主要包括   RDO   风格的功能性,以便和   OLE   DB   数据源交互,另外还包括远程和   DHTML   技术。  
   
    一般说来,在   ADO   的演化过程中,马上把大多数   DAO   应用程 序(except   possibly是那些使用   ODBCDirect   的应用程序)移植到   ADO   上可能为时太早,因为当前的   ADO   并不支持数据定义   (DDL)、用户、组,等等。不过,如果您只将   DAO   用于客户—服务器应用程序,而并不依赖于   Jet   数据库引擎或不使用   DDL,那么您现在就可能移植到   ADO。最终,Microsoft   将提供一个   ADO   DDL   部件来帮助进行   DAO   到   ADO   的移植,并为   OLE   DB   供应商提供一般的   DDL   支持


  为什么使用   ADO?  
    ADO   是为   Microsoft最新和最强大的数据访问范例   OLE   DB   而设计的,是一个便于使用的应用程序层接口。OLE   DB   为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件

系统、文本和图形、自定义业务对象等等。ADO   在关键的   Internet   方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为   ADO,是用了一个比较熟悉的暗喻,OLE   自动化接口。同时   ADO   使用了与   DAO和   RDO相似的约定和特性,简化的语义使它更易于学习。  


  以上著重從編程的角度討論了訪問數据庫的不同方法,從敘述中我們可以看到以上方法种种的不同本質上都是的訪問方式的不同.主要區別在于:  
  1,是否采用了分層的方式來訪問數据庫,比如,dao   与odbc,ole之間顯著的不同.軟件技術從最初的不分層,到c/s結构,到如今的多層結构.都是通過設計通用的中間層來簡化程序設計.  
  2,是支持com   架构的ole訪問方式,還是支持odbc架构的odbc驅動訪問
原创粉丝点击