.NET世界各成员之间的关系
相信看到这篇文章的人,心中肯定有这样的想法:ODBC、OLEDB、ADO、ADO.NET貌似都是访问数据库的东东,那么他们之间有什么区别,又有什么联系呢?不要着急,待我慢慢道来。
先说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,OLEDB(ObjectLinking and Embedding,Database,又称为OLE DB或OLE-DB),一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).
好吧,说实话,关于OLEDB我也木有真正体会到它的魅力之所在,不过可以肯定的是,它比oldb功能更强大,使用更方便。它依赖于ODBC,是在ODBC之上的一次封装。暂时就这么理解吧。
至于ADO,ADO (ActiveXDataObjects)是一个用于访问数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。
说道ADO,可谓是后起之秀啊,其实,在它之前,出现过DAO和RDO,但随着ADO的推出,它成为在Windows NT 4.0和Windows 2000操作系统上开发数据库应用程序的首选。它将对象模型统一化,改由数据库厂商发展数据提供者(data provider,这个模式在此时奠基),从这点来说,貌似它跟ODBC功能类似,但是,它是建立在ODBC和OLEDB之上的又一次封装。而且ADO本身则是与数据源无关 (data source independent) 的开发方法,这让它迅速的获得了使用ASP与Visual Basic开发人员的青睐,顺利取代DAO与RDO等模型。
纯语言的描述可能不太直观,让大家看一张图片。
简单给大家解释一下,最上面的是我们编写的程序,最下面的是数据库,而中间的就是今天的主要内容——一些数据库访问技术。从第二部分我们可以看出,ODBC位于数据访问的最底层,OLEDB次之,ADO位于最上层。我们的应用程序可以通过三种方式访问数据库,分别是应用程序——ODBC——数据库,应用程序——OLEDB——ODBC——数据库,应用程序——ADO——OLEDB——ODBC——数据库。到此为止,ODBC、OLEDB、ADO三者的关系应该清楚了。
最后所ADO.NET,ADO虽然是比较成功的产品,但ADO本身的架构仍然有缺陷,尤其是在开发网络应用程序时,Recordset无法脱机,严重影响了网络应用的开发。于是在1998年时,微软提出了一个下一代的应用程序开发框架 (Application Framework) 的计划。很荣幸,ADO.NET被包含在此计划之内,它引入了脱机型数据模型的概念,成功解决了ADO所不能及的问题。许多人将ADO.NET视为ADO的下一个版本,但其实它是一个全新的架构、产品概念。具体的ADO.NET介绍,参见详解ADO.NET
另外,想了解.NET的朋友,可以看看下面这篇博客:.NET世界各成员之间的关系
.NET世界各成员之间的关系的更多相关文章
- python面向对象与结构成员之间的关系
1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...
- python --- 18 类与类之间的关系, 特殊成员
类与类之间的关系 一.依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作 随时可以更换另外一个东西来完成此操作 此时的关系是最轻的. 二.关联关系(组合关系,聚合关系) 1.一对 ...
- day16 类之间的关系 特殊成员
类与类之间的关系1.依赖关系(一个对象当另一个对象的参数) 关系最浅, 特殊成员: 1. 类名() 会自动调用 __init__() class Foo: def__init__(self, nam ...
- python 类与类之间的关系. 特殊成员
一.类与类之间的关系 1.依赖关系 在方法的参数位置把另一个类的对象作为参数进行传递 class Person: def play(self, tools): # 通过参数的传递把另一个类的对象传递进 ...
- python之路--类与类之间的关系
类和类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...
- python学习 day017打卡 类与类之间的关系
本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...
- day18 类与类之间的关系
今日所学内容: 1.类与类之间的关系 2.self 到底是谁? 3. 特殊成员 : 1.类与类之间的关系 在我们的世界中事物和事物之前总会有一些联系 在面向对象中,类与类之间也可以产生相关的联系 1) ...
- python 类之间的关系
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...
- day 18 类与类之间的关系
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中,类和类之间也可以产生相关的关系 1.依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作, ...
随机推荐
- sharedevelop iis express
sharedevelop 的IIS express的配置文件在 %userprofile%\documents\IISExpress\config\applicationhost.config 自动会 ...
- 12月上旬poj其他题
poj3170 1,4两遍bfs: poj3171 改一改poj2376即可 poj3172 dfs+剪枝 其实增长速度很快,n<=40,题目吓你的: poj3661 比较经典的dp:设f[i, ...
- Windows Phone 获取网络类型(GSM/CDMA/WIFI/Ethernet)
一.判断是否有网络数据连接: 最基本的网络状态判断,如果没有网络连接,一切操作都进行不下去啦. Microsoft.Phone.Net.NetworkInformation.NetworkInterf ...
- 排序算法(C#)
1.插入排序 1.1直接插入排序 算法介绍: 直接插入排序(straight insertion sort)的做法是: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. ...
- 修改linux用户密码
对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: ...
- Month Calendar
http://www.codeproject.com/Articles/10840/Another-Month-Calendar#xx4614180xx Another Month Calendar ...
- 《C Primer Plus 第五版》读书笔记
CH1-2:概述 链接器:链接库代码.启动代码(start-up code) CH3-5:数据.字符串.运算符 1 数据类型存储方式:整数类型.浮点数类型 2 浮点数存储:小数部分+指数部分 3 in ...
- Nexus 5 Android 6.0.1刷机、Root
Nexus 5 Android 6.0.1刷机.Root 2016-01-24 一. 准备 1. 备份通讯录等数据,切记. 2. 准备adb .fastboot.网上搜 ...
- 问题与对策:CSS的margin塌陷(collapse)
1: <!DOCTYPEHTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN"> 2: <html> 3: & ...
- 【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC
Hadoop的各个服务间,客户端和服务间的交互采用RPC方式.关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍.只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务 ...