zoukankan      html  css  js  c++  java
  • SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]

    一、ODBC

     
    • ODBC的由来

    1992年Microsoft和Sybase、Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商和Third-Party的支持而逐渐成为标准的数据存取技术。
    ODBC以当时的业界标准规范X/OpenCall-LevelInterface(CLI)和ISO/IEC9075-3Call-LevelInterface(SQL/CLI)为涵盖的范围,因而支持了广阔的数据库。虽然ODBC在初期的版本中执行效率不佳,而且功能有限,因此也为人们所贬低。但是,随着Microsoft不断地改善ODBC,使ODBC的执行效率不断增加,ODBC驱动程序的功能也日渐齐全。到目前,ODBC已经是一个稳定并且执行效率良好的数据存取引擎。不过ODBC仅支持关系数据库,以及传统的数据库数据类型,并且只以C/C++语言API(API就是一些C语言的代码,是最底层的程序,在windows中就是一些.dll的文件)形式提供服务,因而无法符合日渐复杂的数据存取应用,也无法让脚本语言使用。因此Microsoft除了ODBC之外,也推出了其他的数据存取技术以满足程序员不同的需要。(注:ODBC是面向过程的语言,由C语言开发出来,不能兼容多种语言,所以开发的难度大,而且只支持有限的数据库公司,对于后来的EXCEL等根本不能支持)

    • ODBC的介绍

     ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

    应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

     

     

    二、 OLE DB

     
    • OLE-DB的由来

    随着数据源日益复杂化,现今的应用程序很可能需要从不同的数据源取得数据,加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是这些数据源可能不是传统的关系数据库,而可能是Excel文件,Email,Internet/Intranet上的电子签名信息。Microsoft为了让应用程序能够以统一的方式存取各种不同的数
    据源,在1997年提出了UniversalDataAccess(UDA)架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。UDA以OLE-DB(属于操作系统层次的软件)做为技术的骨架。OLE-DB定义了统一的COM接口做为存取各类异质数据源的标准,并且封装在一组COM对象之中。藉由OLE-DB,程序员就可以使用一致的方式来存取各种数据。但仍然OLEDB是一个低层次的,利用效率不高。

    • OLE-DB的介绍

    OLE DB(Object Link and embed 即对象连接与嵌入。)是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化问题语言(SQL)能力,还具有面向其他非SQL数据类型的通路。 作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。OLD DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE DB的应用程序会用到如下的请求序列:初始化OLE 连接到数据源 发出命令 处理结果 释放数据源对象并停止初始化OLE

    OLE DB标准中定义的新概念----OLE DB将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称:数据提供者(Data Provider)。 提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。

    我们要开启如Access 数据库中的数据,必须用ADO.NET透过OLE DB 来开启。ADO.Net 利用OLE DB 来取得数据,这是因为OLE DB 了解如何和许多种数据源作沟通,所以对OLE DB有相当程度的了解是很重要的。

     

    • OLE DB 和ODBC的区别

    由于OLEDB和ODBC 标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE DB 是不是替代ODBC 的新标准?答案是否定的。实际上,ODBC 标准的对象是基于SQL 的数据源(SQL-Based Data Source),而OLE DB 的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC 标准的数据源是符合OLE DB 标准的数据存储的子集。


    三、 ADO

     
    • ADO的由来

    虽然OLE-DB允许程序员存取各类数据,是一个非常良好的架构,但是由于OLE-DB太底层化,而且在使用上非常复杂,需要程序员拥有高超的技巧,因此只有少数的程序员才有办法使用OLE-DB。这让OLE-DB无法广为流行。为了解决这个问题,并且让VB和脚本语言也能够藉由OLE-DB存取各种数据源,Microsoft同样以COM技术封装OLE-DB为ADO对象,(这一步是很重要的,实现了多种程序可以互相调,并且可以开发的语言也丰富了)简化了程序员数据存取的工作。由于 ADO成功地封装了OLE-DB大部分的功能,并且大量简化了数据存取工作,因此 ADO也逐渐被愈来愈多的程序员所接受。

    • ADO的介绍

    微软公司的ADO (ActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。

    ADO被设计来继承微软早期的数据访问对象层,包括RDO (Remote DataObjects)和DAO(Data Access Objects)。ADO在1996年冬被发布。

    ADO包括了6个类:Connection,Command,Recordset,Errors,Parameters,Fields

     

    现在好多数据库都是基于ado.net框架实现的,oracle的oda,还有微软自己的EF框架,基本底层都用的ADO.NET。

     

     

    四、说说自己的理解

     

    说通俗点 OLE DB和ODBC都是最底层的东西,而ADO对象给我们提供了一个“可视化”,和应用层直接交互的组件,我们不用过多的关注OLEDB的内部机制,只需要了解ADO通过OLE DB创建数据源的几种方法即可,就可以通过ADO轻松地获取数据源。可以说ADO是应用程序和数据底层的一个中间层,ADO对象通过OLE DB间接取得数据库中的数据。OLE DB只是提供了通向各种数据库的一个通用接口,简单的可以用下图来表示:

     

     

    那么接下来用一些通俗易懂的图片解释下:

     

     

              最早:数据库编程都是直接操作数据库厂商提供的API,每个数据库厂商的提供的数据库操作的API都不相同,如调用函数,操作语句等等。因此每个应用程序都只能对应一个数据库。如果想换数据库,需要重写一遍数据库操作代码,这样的代价是非常大的。

           后来:微软开发的ODBC结束了直接调用数据库API进行数据库操作的方式.ODBC将所有数据库特定的,底层的操作细节(CLI)封装在驱动(drive)中,并提供一套标准的函数调用。使用时,ODBC会动态地加载数据库的CLI,将函数调用转换成各个数据库的CLI调用。这样应用程序与数据库API本身就隔绝开了,如下图所示。这样访问所有的关系型数据库都可以使用一套标准的ODBC API即可。ODBC成为最早的通用数据库访问技术。

        

      

             再后来:随着面向对象的技术的发展,微软又推出了OLE DB。 在OLE DB中,将不会有drive的概念,取而代之的是提供者(provider),每个数据库厂商都需要对象的OLE DB provider。需要注意的是,provider实现了基于COM的接口,这些接口封装了访问数据库的操作细节(CLI)。那么应用程序使用这些通用的接口来进行数据库的访问,而不用考虑数据库的细节。所以,可以理解OLE DB是规定了数据使用者和提供者之间达成了一种协议。请参考下图。    

            前面所述的是提供了provider的数据库。为了兼容一些没有提供provider的数据库,OLEDB也可以基于ODBC,即provider是基于ODBC实现的。这种实现会经过两层,效率会比较低。由于目前大多数数据库都提供了provider,所以这种方式比较少见。 可以看到,OLE DB与ODBC类似,但是原理上是不相同的。还有一点就是,ODBC只支持关系型数据库,而OLE DB除了关系型数据库外,还支持Excel等。

      再再后来,微软为了简化OLE DB接口,推出了ADO来封装OLE DB的接口,实现与数据库的通信,使得用户更易于调用数据库相关操作。随着.NET推出,微软进一步进行升级ADO为ADO.NET。 

         

    JDBC跟上面几种数据库连接技术不太相同,它是面向JAVA的,是种用于执行SQL语句的Java API。下面会详细阐述JDBC与其他几种技术的异同。

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/qqflying/p/9266642.html
Copyright © 2011-2022 走看看