本帖最后由 liu-aguang 于 2015-1-4 09:12 编辑
一. ADO数据访问技术概述(Microsoft® ActiveX® DataObjects) (一)MDAC/WDAC 有一天,我第一次到一个高大上朋友家作客,刚到小区单元门口看到墙脚处有一个封闭建筑体.我问:这是什么呀?,好缺德还做一鞋柜.朋友说,这是我们单元的一个”信息资源”接口.各家各户使用电视/电话/网络等不需要分别到相关服务部门去直接连接了,可以从这里简单连接.这个接口里面包含多个组件接口,如网络接口/电视信号接口等,它们分别负责与不同上级连接. 就说网络组件接口吧:如果你家想上网就用它的网络接口,网络接口上又有多种接口,根据你的需要可以使用联通/电信或广电等.不同的网络提供商,又提供多种服务,比如过气的拨号连接或快要过气的ADSL连接或者目前最先进的光纤连接.使用它们只要一个电话,连接管理人员就会来帮你搞定连接.不过电话地址(连接字符串)可不要搞错……唉,打住吧.我心想,有一天我单元门前的接口要求增加一个与外星人聊天的接口. 微软老大绝对是世界上最先住公寓的”先富起来的那部分人”.兴许受此启发,为了方便不同应用程序(比如EXCEL程序,VBA程序,C/C++等等)以统一方式访问不同的数据源(比如SQL Seviver/xlsx/txt),老大首先提出ODBC概念,它的学名是开放数据库互连(Open Database Connectivity,ODBC. 由SQL Access Group,X/Open(目前为The Open Group的一部份)以及ISO/EIC所提出的Call Level Interface(CLI,调用层次接口)接口规格).说得有点高大上,实际就是想在它的操作系统中做一个” 鞋柜”. 操作系统中ODBC管理器是它的第一个实现.ODBC的框架中包含有多种与连接相关的功能和服务组件.有了它,基于windows平台开发的应用程序就不用直接与数据源打交道.它只需要打(open)个”电话(连接字符串)”给ODBC管理器,数据源的ODBC驱动程序解析这个传过来的电话地址,然后与对应的数据源打交道.不同的数据源微软提供不同的驱动程序.数据源商家也可自己提供自己的驱动程序.用什么驱动程序由ODBC提供者根据应用程序的”电话”决定.(应用程序开发人员能够利用ODBC所开放的API调用,经由ODBC Driver来进入数据库进行访问以及处理工作).
后来,数据源类型结构越来越复杂,应用程序的要求也变得五花八门,兼容/性能/效率/简捷的呼声让微软心烦意燥,只有不断修正升级ODBC管理器,也同时升级相应的ODBC驱动程序.但无论如何野鸡变不了凤凰, 终于在某年某月某天,一个天才的跟班提了一个建义:放弃ODBC,重新组建数据访问结构体系.于是他们搞了一个更先进的玩意儿叫OLE DB接口.不过很多公司花巨资开发的基于ODBC开发的软件大量存在,微软怕得罪他们.所以OLE DB与ODBC直到现在也还共存,两者实施”一国两制”政策,并可相互沟通. 与ODBC不同的是,OLE DB接口不是用驱动程序去与数据源交流,而是用OLE DB提供者(OLEBD Provider),OLEDB提供者分为OLEDB服务提供者及数据提供者,它是一个DLL文件.对于简单的数据源如Office文档,文本文件或低版本的系统数据库,只需要数据提供者;而对于像SQL Server这样高版本更复杂的数据库,就同时需要两种服务提供者.不同的数据源有不同的提供者,后面的示意图中我们可以看到.OLEDB提供者,有的由微软提供特别是在初期,有的由数据库商家提供. OLEDB提供者的开发者为了不让原来的程序员失业(玩笑话,通过ODBC访问某些数据库有当时不可替代的作用),方便应用程序也可以用ODBC方式访问数据源,所以也同时免费搭配了相对应的ODBC驱动程序.所以使用OLE DB接口的应用程序,即可以OLEDB提供者直接访问数据源,也可以继续调用ODBC管理器,使用OLE DB的ODBC提供者,让ODBC驱动访问数据源.
再后来,兴许有一天老大内急,在男厕所里遇见了一个美女.老大既难堪又生气,认为有伤诶家体面,后来小秘告诉他,该美女使用OLEDB编程太艰辛,已经累得两眼发花了.于是,老大召集人马,研究简化对OLEDB的使用,于是有了ADO直到目前的ADO.Net.
把上面的功能整合起来,微软把它们打包植于操作系统中,称之为MDAC(Microsoft Data Access Components),从Windows vista版开始,改名WDAC(WindowsData Access Components),MDAC是什么,老大说这是堆栈. 下面是前不久的MDAC/WDAC结构体系,它来自于MSDN库.当前的体系中包含.NET框架,可以使用ADO.net访问技术.并没有在图中.
从该示意图可以看出: 1. 从上向下,第一层是需要数据的应用程序(如VBA)或远程访问程序 第二层就是单元门口那个难看的东东了(MDAC).实际上里面还有很多乱七遭八的东西,有的太陈旧已经清理出去了,如JRO/MSDAOSP;有的在正在被清除,如在win7 64位系统中,不再有DAO/RDS/JET等的64位版本了,所以64位的应用程序不能在64位操作系统中使用它们.(说明它仍然提供32位的版本,所以32位的应用程序仍可使用) 要提醒大家的是,目前基于internet的数据库访问,不再使用ADO或RDS技术,而是使用ADO.Net. 第三层是应用程序所要访问的各种数据源. 2. 我们只看”Your Appliction”,从右到左向下的”竖线”, 它描述了应用程序访问数据源的各种方式: (1) 应用程序----ODBC---数据源: 直接调用ODBC管理器(ODBC DriverManager),利用ODBC驱动程序(ODBC Drivers)访问数据源;现在恐怕只有那帮”低层”打工仔在用了. (2) 应用程序—ADO—数据源: 利用ADO或ADO.net(ADO是VBA唯一的访问非Office数据库方式)接口,访问数据源.这是目前各种编程语言较普遍的访问管道; (3) 应用程序—OLEDB核心服务--OLEDB Provider—数据源: 调用OLE DB核心服务,访问数据源(较低级语言使用); (4) 应用程序—OLEDB Provider—数据源: 直接调用OLE DB提供程序访问数据源(较低级语言使用). 3. 不知你注意没有,上面(2)(3)(4)都是使用OLEDB技术访问数据源,从图中证实了前面的说法,它们有两种方式访问数据源: 其一, 最终利用OLE DB的提供程序(OLE DB Provider)访问数据源; 其二, 调用ODBC管理器,利用OLE DB的ODBC提供程序(MSDASQL),让ODBC驱动程序访问数据源. 4. 前面多次提到,后续内容也会用的两个重要概念简单介绍一下: (1) 数据消费者:它是需要数据源中数据的程序或对象;比如,可以说我们的VBA程序是数据消费者. (2) 提供者(Provider):也叫提供程序.有多种服务提供者和数据提供者,它能在本地访问数据,从数据源中直接获取数据,并以表格形式呈现(显露)给消费者的一个OLEDB组件.如Microsoft.Jet.OLEDB.4.0.或 MSDASQL
好了,上面部分是铺垫,下面说说这部分内容的主题ADO数据访问技术.
|