.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来帮助你完成这个操作, ...
随机推荐
- How to change data dir of mysql?
# 1 copy orgin data dir of mysql to new one cp -R /var/lib/mysql /mysqldata chown mysql:mysql -R /my ...
- IMX51启动模式
相关链接: http://blog.csdn.net/kickxxx/article/details/7236040 http://blog.csdn.net/evilcode/article/det ...
- POJ2892Tunnel Warfare (线段树)
http://poj.org/problem?id=2892 记录每个区间端点的左连续及右连续 都是单点更新 用不着向下更新 还简单点 找错找了N久 最后发现将s[w<<1|1]写成s[w ...
- [2015编程之美] 资格赛C
#1150 : 基站选址 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 需要在一个N × M的网格中建立一个通讯基站,通讯基站仅必须建立在格点上. 网格中有A个用户,每个 ...
- xml 实现圆形图 和 椭圆形图
1. 效果图 2.圆形图 <ImageView android:layout_width="wrap_content" android:layout_height=" ...
- 几款JS地图插件比较
因工作需要,最近研究几款关于地图的JS插件,现与大家分享一下. 以下比较只是浅层次的分析一下,并没有实际通过项目检验,所以不足之处还请大家指出. 地图插件对比 插件名 简介 区域支持 扩展性 离线支 ...
- XUtils框架的学习(一)
一 xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...
- 文件上传利器JQuery上传插件Uploadify
在做日常项目中,经常在后台需要上传图片等资源文件,之前使用过几次这个组件,感觉非常好用 ,但是每次使用的时候都是需要经过一番查阅,所以还不如记住在这里,以后使用的时候就翻翻. 他的官方网站如下:htt ...
- HDU5593 ZYB's Tree 树形DP +分治
感觉其实就是树分治,一次BC的题,感觉这次题目质量比较高,仅代表蒟蒻的看法 一次DFS获取每个点到子树的距离不大于K的点的个数, 然后一遍BFS获取从每个点父亲不大于K的的个数,层层扩展,还是想说 其 ...
- 傲游浏览器4,傲游浏览器5如何一键批量打开url链接。
傲游浏览器批量打开网址的插件没用了.有很多网友发了方法也无法实现.实际上,是可以实现傲游浏览器4,傲游浏览器5一键批量打开url链接的.我来告诉大家如何来实现.最新的M5都能使用.在收藏夹添加一个收藏 ...