ODBC, OLEDB, ADO, ADO.Net的演化简史
ODBC, OLEDB, ADO, ADO.Net的演化简史
Copy&Paste了一下午,终于一蹴而就此文,嘿嘿...
1.演变历史
它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.Net。
看看Wiki上的MDAC定义:“Microsoft Data Access Components(MDAC)是微软专门为数据访问功能而发展的应用程序开发接口,做为微软的统一化数据访问(Universal Data Access; UDA)解决方案的核心组成,最初的版本在1996年时发表,其组成组件有ODBC,OLE DB以及ADO,其中ADO是在Visual Basic上唯一的数据访问管道,而OLE DB则是基于COM之上,供C/C++ 访问与提供数据的接口,ODBC则是统一化的数据访问API。”
也就是说,ODBC, OLE DB, ADO都是这个解决方案的组件。
再看看这张调用图,很多事情就不言自明了。(其实我觉得这图有些不准确,.Net Managed Provider应该有条专线直通Data Stores, 这样才能体现出Sql Server的性能优越性嘛...)
2.ODBC之前
事实上, 这几乎都可以称为史前了, 那时数据访问是这个样子滴...
总结一下就是:以前访问oracle,就要用oracle 的api, 要访问db2,就要用db2的api,这样写出来的代码都是不一样的,一旦领导层要更换数据库,结果程序员就倒血霉了,这不是好方法,ODBC因此应运而生。
3.ODBC
算是较早期的数据访问库,现在已经过时, 但还偶有用处, 看下面图片:
下面是其wiki描述:
"In computing, ODBC (Open Database Connectivity) is a standard C programming language interface for accessing database management systems (DBMS). The designers of ODBC aimed to make it independent of database systems and operating systems. An application can use ODBC to query data from a DBMS, regardless of the operating system or DBMS it uses.
ODBC accomplishes DBMS independence by using an ODBC driver as a translation layer between the application and the DBMS. The application uses ODBC functions through an ODBC driver manager with which it is linked, and the driver passes the query to the DBMS."
"ODBC defines a standard C API for accessing a relational DBMS. It was developed by the SQL Access Group in 1992 to standardize the use of a DBMS by an application. ODBC provides a universal middleware layer between the application and DBMS, allowing the application developer to use a single interface. If changes are made to the DBMS specification, only the driver needs updating. An ODBC driver can be thought of as analogous to a printer or other driver, providing a standard set of functions for the application to use, and implementing DBMS-specific functionality.
An application that can use ODBC is referred to as "ODBC-compliant". Any ODBC-compliant application can access any DBMS for which a driver is installed. Drivers exist for all major DBMSs and even for text or CSV files."
"An ODBC driver enables an ODBC-compliant application to use a data source, normally a DBMS. (Some non-DBMS drivers exist, for such data sources as CSV files. Such drivers implement a small DBMS.) ODBC drivers exist for most DBMSs, including Oracle, Microsoft SQL Server (but not for the Compact aka CE edition), Sybase ASE, and DB2.
Because different technologies have different capabilities, most ODBC drivers do not implement all functionality defined in the ODBC standard. Some drivers offer extra functionality not defined by the standard."
总结来说:ODBC可以搞定关系型数据库.
4.OLE DB
先看图吧!
总结来说: OLE DB的革新, 是它除了能处理关系型数据库, 还能处理非关系型数据了, 如Excel, 这就比ODBC更加进步了.
5.ADO
看看下面的图就明白了,一句话,ADO封装了OLE DB。
Wiki说法:"Microsoft's ActiveX Data Objects (ADO) is a set of Component Object Model (COM) objects for accessing data sources. A part of MDAC, it provides a middleware layer between programming languages and OLE DB (a means of accessing data stores, whether they be databases or otherwise, in a uniform manner). “
一句话:ADO实际上是位于OLE DB顶部的一个附加层(也就是位于OLE DB与应用程序之间), 它封装了OLE DB(精确的说是封装了一个子集,但已经够用了)
用ADO和OLE DB连接SQL数据库的字符串写法相同,都是: connstr="PROVIDER=SQLOLEDB; DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"
只不过ADO的API好用,大家更加熟悉而已,其实,最后还是通过OLE DB来实现的。
6.ADO.Net
车轮滚滚,终于到了Ado.Net.
ADO.NET (ActiveX Data Objects for .NET) is a set of computer software components that programmers can use to access data and data services. It is a part of the base class library that is included with the Microsoft .NET Framework. It is commonly used by programmers to access and modify data stored in relational database systems, though it can also access data in non-relational sources. ADO.NET is sometimes considered an evolution of ActiveX Data Objects (ADO) technology, but was changed so extensively that it can be considered an entirely new product."
看下图可知,System.Data.SqlClient与System.Data.OleDb的区别, 论性能,SqlClient访问Sql Server最快,论通用性,还是要用OleDb。虽然没有找到System.Data.Odbc的图,但相信它和OleDB的类似。
7.ODBC与的OLE DB区别
前面已经写过了, 再重申一下, ODBC只能处理关系型数据库, OLE DB不仅能处理关系型数据库, 还能处理非关系型数据库, 如Excel等等.
推荐资料:
1.MDAC
http://zh.wikipedia.org/wiki/Microsoft_Data_Access_Components
2.ActiveX Data Objects
http://en.wikipedia.org/wiki/ActiveX_Data_Objects
3.ODBC
http://en.wikipedia.org/wiki/ODBC
4.ODBC、OLEDB、ADO、SQL的关系
http://www.cnblogs.com/yuanfubiao/archive/2010/12/22/1914149.html
5.ADO,OLEDB,ODBC,DAO的区别 .
http://blog.csdn.net/sunboy_2050/article/details/6624684
6.ADO.Net本质论
7.ADO与ADO.Net编程指南
作者:BobLiu
邮箱:lzd_ren@hotmail.com
出处:http://www.cnblogs.com/liuzhendong
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
ODBC, OLEDB, ADO, ADO.Net的演化简史的更多相关文章
- 【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史
原文:ODBC, OLEDB, ADO, ADO.Net的演化简史 1.演变历史 它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.N ...
- ODBC, OLEDB, ADO, ADO.NET
在SSIS中,选择Connction Manager时,有很多的类型.其中会发现如下4个连接类型ODBC, OLEDB, ADO, ADO.NET.这4个东东到底是什么,他们有什么关联,什么区别,如何 ...
- [转帖]ODBC、OLEDB、ADO、ADO.NET
一文详解ODBC.OLEDB.ADO.ADO.NET之间的关系 2019年01月16日 21:28:38 LoveMIss-Y 阅读数:66更多 所属专栏: 白话C#高级编程 版权声明:本文为博主 ...
- SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]
一.ODBC ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...
- ODBC、OLEDB、ADO、SQL的关系
对于一个刚接触数据库的菜鸟来说(比如我),总是搞不清SQL.ADO.OLE DB.ODBC,大脑中一片混乱,好像懂了,又好像没懂,非常的苦恼,今天下了点功夫研究了一下,贴出来,其中肯定有好多错误,希望 ...
- 数据库访问接口(ODBC,OLEDB,ADO)
数据库访问接口发展历史 ODBC历史 ODBC(Open Database Connectivity,开放数据库互连).要了解ODBC是什么,先了解一下数据库连接的相关知识.在最开始连接数据库时,由于 ...
- (4.3)ODBC/OLE DB/ADO概念与使用情况
一.ODBC ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...
- SSIS使用OleDB和Ado.Net两种方式调用 存储过程
在使用”执行 SQL 任务“组件调用存储过程时,连接方式使用OleDB和Ado.Net稍有不同,结合图例说明一下 当我们使用OleDB时,设置的截图如下: 参数使用?来代替,Parameter Nam ...
- ODBC OLEDB
ODBC OLEDB https://www.cnblogs.com/dachuang/p/8615754.html
随机推荐
- Flask 2 程序的基本结构1
NOTE 1.初始化:所有的Flask程序都必须创建一个程序实例. app = Flask(__name__) # 向Flask的构造函数传入参数__name__ 2.路由和视图函数(VF): Cli ...
- POJ 2185 Milking Grid(KMP最小循环节)
http://poj.org/problem?id=2185 题意: 给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完. 思路: 我对于字符串的最小循环节是这么理解的: ...
- html 入门2-表
html 入门-列表 表格 表单 一.表标签 1,无序列表 ( ul:li ) 注意:代码排版必须要层次分明 2,有序列表 (ol:li) 3,自定义列表 (dl:li) 二.表格标签 1,tabl ...
- js的数组与对象关系
有的时候总犯糊涂,不理解对象和数组的关系,转载一篇文章,深刻记忆一下 http://hi.baidu.com/samdan/item/05179313d1ee4b9e99ce3371 比如有一个数组a ...
- JavaScript--练习1--99乘法表
JavaScript--练习1--99乘法表 一.心得 二.代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...
- Solaris 11 让 ls 的输出 带上颜色
Solaris 默认的ls , 是不会显示 文件和文件夹的颜色的. 我们可以利用 gnu 的 ls 命令. 修改:~/.bashrc alias ls='/usr/gnu/bin/ls --color ...
- windows电脑使用技巧及常用CMD
管理用户和组 win+R,输入 compmgmt.msc 本地用户和组->用户 本地安全策略 win+R,输入 secpol.msc 本地策略->安全选项,启用禁止空密码登录如下图,可以防 ...
- Spring 调度任务@scheduled学习总结
官网Api:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#sche ...
- 记录JAVAWEB部署到JBOSS中遇到的问题
服务器环境 jdk1.8.0_212 + jboss-eap-6.4 系统是 Service 2008 R2 数据服务器 oracle12c 系统是 Service 2008 R2 首先安装的or ...
- nmcli 命令的基本使用
nmcli命令 地址配置工具:nmcli nmcli device 查看所有网卡的信息 nmcli device status 和numcli device 相同 nmcli device ...