一文详解ODBC、OLEDB、ADO、ADO.NET之间的关系

2019年01月16日 21:28:38 LoveMIss-Y 阅读数:66更多

所属专栏: 白话C#高级编程
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27825451/article/details/86515141

相信看到这篇文章的人,心中肯定有这样的想法:ODBC、OLEDB、ADO、ADO.NET貌似都是访问数据库的东东,那么他们之间有什么区别,又有什么联系呢?不要着急,待我慢慢道来。

一、ODBC

ODBC(Open Database Connectivity,开放数据库互连)。

ODBC,官方的定义是这样的,开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准。ODBC(Open DatabaseConnectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。

简单说一下我的理解,从本质上说,ODBC是一种标准,而这些所有的标准其实是一系列的接口。那么这一标准要完成什么工作呢?打个比方,我们把sql Server、Sybase、Oracle等数据库比作是一个个的大水箱,每个水箱都有一个出水口,但不同水箱出水口的形状不一样,sql Server 的可能是三角形的,Sybase的可能是正方形的,而程序员如果需要使用水箱中的水(需要从数据库中取数据),就必须使用与之想对应的水管,比如使用sql Server水箱中的水,就必须用三角口的水管,而用Sybase水箱的时候就得用正方形的水管,这无疑给编程人员带来了麻烦。于是,微软制定了ODBC这么一个标准,要求不管是什么水箱,最后的出水口必须是圆形的,程序员只要有一根圆形的水管,就可以取到任意水箱中的水。至于不同水箱如何把出水口转变成圆形的,这不是我们编程人员的事,是你水箱的事。于是乎,各个水箱都开发了这么一根水管,一头形状是自己水箱口的形状,另一头是标准的圆形。比如sql Server,它就需要有一根一头是三角形,一头是圆形的水管。而这根特殊的水管映射到程序界就是所谓的ODBC驱动。有了ODBC这一标准,各个水箱中的水还可以被使用,与此同时,使用者也方便了许多,皆大欢喜。

二、OLEDB

OLE DB(Object Linking and Embedding, Database,对象连接嵌入数据库)

再说OLEDB,OLEDB(ObjectLinking and Embedding,Database,又称为OLE DB或OLE-DB),一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).

好吧,说实话,关于OLEDB我也木有真正体会到它的魅力之所在,不过可以肯定的是,它比ODBC功能更强大,使用更方便。它依赖于ODBC,是在ODBC之上的一次封装。暂时就这么理解吧。

三、ADO

ADO(ActiveX Data Object,活动数据对象)

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

说道ADO,可谓是后起之秀啊,其实,在它之前,出现过DAO和RDO,

DAO(Data Access Object,数据访问对象)
RDO(Remote Data Objects,远程数据对象)

但随着ADO的推出,它成为在Windows NT 4.0和Windows 2000操作系统上开发数据库应用程序的首选。它将对象模型统一化,改由数据库厂商发展数据提供者(data provider,这个模式在此时奠基),从这点来说,貌似它跟ODBC功能类似,但是,它是建立在ODBC和OLEDB之上的又一次封装。而且ADO本身则是与数据源无关 (data source independent) 的开发方法,这让它迅速的获得了使用ASP与Visual Basic开发人员的青睐,顺利取代DAO与RDO等模型。

纯语言的描述可能不太直观,让大家看一张图片。

简单给大家解释一下,最上面的是我们编写的程序,最下面的是数据库,而中间的就是今天的主要内容——一些数据库访问技术。从第二部分我们可以看出,ODBC位于数据访问的最底层,OLEDB次之,ADO位于最上层。我们的应用程序可以通过三种方式访问数据库,分别是

(1)应用程序——ODBC——数据库,

(2)应用程序——OLEDB——ODBC——数据库,

(3)应用程序——ADO——OLEDB——ODBC——数据库。

到此为止,ODBC、OLEDB、ADO三者的关系应该清楚了。

四、ADO.NET

最后所ADO.NET,ADO虽然是比较成功的产品,但ADO本身的架构仍然有缺陷,尤其是在开发网络应用程序时,Recordset无法脱机,严重影响了网络应用的开发。于是在1998年时,微软提出了一个下一代的应用程序开发框架 (Application Framework) 的计划。很荣幸,ADO.NET被包含在此计划之内,它引入了脱机型数据模型的概念,成功解决了ADO所不能及的问题。许多人将ADO.NET视为ADO的下一个版本,但其实它是一个全新的架构、产品概念。具体的ADO.NET介绍,参见详解ADO.NET相关的文档

五、总结

ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系

ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象数据库及其他非关系数据库。

DAO 提供了一种通过程序代码创建和操纵数据库的机制。最大特点是对MICROSOFT JET数据库的操作很方便,而且是操作JET数据库时性能最好的技术接口之一。并且它并不只能用于访问这种数据库,事实上,通过DAO技术可以访问从文本文件到大型后台数据库等多种数据格式。

ADO 是基于OLE DB的访问接口,它是面向对象的OLE DB技术,继承了OLE DB的优点。属于数据库访问的高层接口。


名词解释:

ODBC(Open DataBase Connectivity)开放数据库互联。是由微软主导的数据库链接标准。

MFC(Microsoft Foundation Class)微软基础类。MFC ODBC是对ODBC的封装。

DAO(Data Access Object)数据访问对象。不提供远程访问功能。

RDO(Remote Data Object)远程数据对象。速度快,支持SQL Server存储过程,同DAO一样是发展很多年了的技术。

OLE-DB(Object Linking and Embedding DataBase)对象链接和嵌入数据库。它依赖于COM和提供OLE DB提供者的厂商而非ODBC使用的SQL。

ADO(ActiveX Data Object)ActiveX数据对象。基于OLE-DB建立连接的局部和远程数据库访问技术。同OLE-DB一样要“年轻”些。

使用中,我们一般用OLE-DB和ADO替代DAO和RDO。

[转帖]ODBC、OLEDB、ADO、ADO.NET的更多相关文章

  1. 【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史

    原文:ODBC, OLEDB, ADO, ADO.Net的演化简史 1.演变历史 它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.N ...

  2. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]

    一.ODBC   ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...

  3. ODBC, OLEDB, ADO, ADO.Net的演化简史

    ODBC, OLEDB, ADO, ADO.Net的演化简史 Copy&Paste了一下午,终于一蹴而就此文,嘿嘿... 1.演变历史 它们是按照这个时间先后的顺序逐步出现的,史前->O ...

  4. ODBC, OLEDB, ADO, ADO.NET

    在SSIS中,选择Connction Manager时,有很多的类型.其中会发现如下4个连接类型ODBC, OLEDB, ADO, ADO.NET.这4个东东到底是什么,他们有什么关联,什么区别,如何 ...

  5. ODBC、OLEDB、ADO、SQL的关系

    对于一个刚接触数据库的菜鸟来说(比如我),总是搞不清SQL.ADO.OLE DB.ODBC,大脑中一片混乱,好像懂了,又好像没懂,非常的苦恼,今天下了点功夫研究了一下,贴出来,其中肯定有好多错误,希望 ...

  6. 数据库访问接口(ODBC,OLEDB,ADO)

    数据库访问接口发展历史 ODBC历史 ODBC(Open Database Connectivity,开放数据库互连).要了解ODBC是什么,先了解一下数据库连接的相关知识.在最开始连接数据库时,由于 ...

  7. (4.3)ODBC/OLE DB/ADO概念与使用情况

    一.ODBC   ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...

  8. SSIS使用OleDB和Ado.Net两种方式调用 存储过程

    在使用”执行 SQL 任务“组件调用存储过程时,连接方式使用OleDB和Ado.Net稍有不同,结合图例说明一下 当我们使用OleDB时,设置的截图如下: 参数使用?来代替,Parameter Nam ...

  9. ODBC OLEDB

    ODBC  OLEDB https://www.cnblogs.com/dachuang/p/8615754.html

随机推荐

  1. 经常在比特币中看到的merkle树是什么?

    区块基础-merkle树   Merkle tree中文叫做梅克尔树,这当然不是一棵真正的植物树,merkle tree是计算机数据结构中的一种树,是由计算机科学家 Ralph Merkle 提出的, ...

  2. Y7000 (1)安装ubuntu1604遇到的问题

    1安装系统 分区的时候 /boot  不再是引导分区 换成 “为系统bois保留的分区” 这个分区取代 /boot 2第一次进系统没有图形界面 在刚开机 ubuntu系统时 按e 在splash后面空 ...

  3. TFT1.44显示屏

    下载这个库 普通arduino的接口 链接 UTFT myGLCD(LPH9135,6,5,2,3,4); mega2560的接口连接 UTFT myGLCD(QD_TFT180A,A2,A1,A5, ...

  4. X86-64寄存器和栈帧--牛掰降解汇编函数寄存器相关操作

    X86-64寄存器和栈帧 概要 说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64:正是由于能向后兼容,AM ...

  5. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  6. Materialized View模式

    Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在 ...

  7. Faster R-CNN:详解目标检测的实现过程

    本文详细解释了 Faster R-CNN 的网络架构和工作流,一步步带领读者理解目标检测的工作原理,作者本人也提供了 Luminoth 实现,供大家参考.   Luminoth 实现:https:// ...

  8. CSS3下的渐变文字效果实现

    如下,第一种方法已实践 一.方法一:借助mask-image属性 可以狠狠地点击这里:CSS3下的渐变文字效果方法一demo 如果您手头上的浏览器是Chrome或是Safari,则您可以在demo页面 ...

  9. Jvm 参数笔记

    Jvm参数含义 https://cloud.tencent.com/developer/article/1129474 从一道题说起 https://blog.csdn.net/crazylzxlzx ...

  10. docker创建nginx+php-fpm+mysql环境(一分钟搭建lnmp)

    下载镜像 docker pull bitnami/php-fpm #下载php-fpm镜像 docker pull nginx #下载nginx镜像docker pull mysql:5.5.59 # ...