一、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与其他几种技术的异同。

SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别相关推荐

  1. 处理 ODBC, OLE DB, 和 SQL Server .NET Provider 中的异常

    经常有使用  ODBC, OLE DB, 或者  SQL Server  .NET Provider 的程序员询问,是否有一个处理过程中的完整的异常处理列表可以参考.这里可以提供一些参考帮助. 异常用 ...

  2. JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系

    ODBC: (Open Database Connectivity,开放数据库互连),它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务 ...

  3. ssms 连接 ssis_SSIS连接管理器:OLE DB,ODBC,ADO.NET

    ssms 连接 ssis In this article, I will first give an overview of the OLE DB, ODBC, and ADO.NET SSIS co ...

  4. ADO、DAO、ODBC、RAO和OLE DB等概念及异同

    一:概念介绍 1.ADO ADO 并不是自动和您现存的数据访问应用程序代码兼容的.当 ADO 封装 DAO 和 RDO 的功能性的时候,您必须将许多语言要素转换为 ADO 语法.在某些情况下,这将意味 ...

  5. mysql的ole db 访问接口msdasql的数据源对象_数据库访问接口(ODBC,OLEDB,ADO)

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

  6. OLE DB 是什么?

    OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口.OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQ ...

  7. 链接服务器“(null)“的 OLE DB 访问接口 “SQLNCLI10“ 返回了消息 “客户端无法建立

    今日在执行链接服务器的时候,发生了以下报错 链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "客户端无法建立 ...

  8. OLE DB , ODBC , ADO 知识了解

    ADO (ActiveX Data Objects) . ADO 是 VB6 推荐操作数据库的方式 . 提供了编程语言和统一数据访问方式OLE DB 的一个中间层. 包括了六个类: Connectio ...

  9. 一致的数据访问技术ADO/OLE DB

    Microsoft新近推出的UDA(Universal Data Access,一致数据访 问技术)为关系型或非关系型数据访问提供了一致的访问接口,为企业 级Intranet应用多层软件结构提供了数据 ...

最新文章

  1. 中国科学技术大学研究生基因组学考试复习提要
  2. maven笔记(3)
  3. NUnitForms 测试GUI应用程序的优秀工具
  4. Hyperledger fabric1.4.0搭建环境
  5. JAVA复习( StringBuffer 和 StringBuilder)
  6. Docker容器网络解析
  7. JavaScript闭包详解
  8. 【索引】联合索引的基本知识
  9. python第三方库——requests
  10. OSX下解决PIL的IOError: decoder jpeg not available 问题
  11. 2021FME博客大赛 —— 基于FME的土地利用与夜光遥感数据综合统计
  12. 设置MyEclipse2015黑色主题背景及删除主题
  13. Flink 1.13(八)CDC
  14. weak_auth 小宁写了一个登陆验证页面,随手就设了一个密码。
  15. 导入FontForge生成字体
  16. PHP源码 京东联盟API接口,转链+cha询订单,cha询推广位
  17. SWT定位– setBounds()或setLocation()
  18. 十三、学习分布式爬虫之字体反爬
  19. Excel如何批量删除数字单元格前的撇号
  20. msfvenom生成木马的简单利用

热门文章

  1. alibaba java_阿里巴巴JAVA开发手册最新版插件Alibaba Java Coding Guidelines安装及使用...
  2. wsdl接口调用请求消息xml_短网址生成 API 接口调用请求
  3. centos7 ifconfig命令找不到_在vbox中创建Centos7服务器集群(1)-- Linux服务器安装
  4. 网易云音乐ios旧版本安装包_网易云音乐产品分析报告
  5. ❤️JavaWeb《超市订单管理系统—了解底层原理》(建议收藏)❤️
  6. 实测解决:SpringBoot 中 Invalid character found in the request target 异常
  7. 数据类型(简单数据类型、简单数据类型传参、复杂数据类型传参)
  8. JavaWeb邮件发送
  9. python的dataframe的groupby_python pandas.DataFrame.groupby()方法详解
  10. 今天心情不太开心?有点心烦