ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access , MYSQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
一个完整的ODBC由下列几个部件组成:
应用程序(Application)。
ODBC管理器(Administrator)。该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
ODBC API。
ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。
数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
各部件之间的关系如图下图所示:
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在访问ODBC数据源时需要ODBC驱动程序的支持。用Visual C++ 5.0安装程序可以安装SQL Server、 Access、 Paradox、 dBase、 FoxPro、 Excel、 Oracle 和Microsoft Text等驱动程序.在缺省情况下,VC5.0只会安装SQL Server、 Access、 FoxPro和dBase的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC 5.0的安装程序并选择所需的驱动程序。
ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。
从结构上分,ODBC 分为单束式和多束式两类。
1.单束式驱动程序
单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。当用户进行数据库操作时,应用程序传递一个ODBC 函数调用给ODBC 驱动程序管理器,由ODBC API 判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。
2.多束式驱动程序
多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。前端应用程序提出对数据库处理的请求,该请求转给ODBC 驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC 驱动程序,再由驱动程序将结果传给应用程序。
=================传说中的分割线=======================
=============下面介绍什么是ODBC技术====================
目前,众多的厂商推出了行行色色的数据库系统,它们在性能、价格和应用范围上各有千秋。一个综合信息系统的各部门由于需求差异等原因,往往会存在多种数据库,它们之间的互连访问成为一个棘手的问题,特别是当用户需要从客户机端访问不同的服务器时。微软提出的开放式数据库互连(Open-DataBase-Connectivity,即ODBC)成为目前一个强有力解决方案,并逐步成为Windows和Macintosh平台上的标准接口,并推动了这方面的开放性和标准化。
一、ODBC的产生和发展
关系型数据库产生后很快就成为数据库系统的主流产品,由于每个DBMS厂商都有自己的一套标准,人们很早就产生了标准化的想法,于是产生了SQL,由于其语法规范逐渐为人所接受,成为RDBMS上的主导语言。最初,各数据库厂商为了解决互连的问题,往往提供嵌入式SQL API,用户在客户机端要操作系统中的RDBMS时,往往要在程序中嵌入SQL语句进行预编译。由于不同厂商在数据格式、数据操作、具体实现甚至语法方面都具有不同程度的差异,所以彼此不能兼容。
长期以来,这种API的非规范情况令用户和RDBMS厂商都不能满意。在80年代后期,一些著名的厂商包括Oracle、Sybase、Lotus、Ingres、Informix、HP、DEC等结成了SQL Access Group(简称SAG),提出了SQL API的规范核心:调用级接口(Call Level Interface),简称CLI。
1991年11月,微软宣布了ODBC,次年推出可用版本。1992年2月,推出了ODBC SDK 2.0版。ODBC基于SAG的SQL CAE草案所规定的语法,共分为Core、Level 1、 Level 2三种定义,分别规范了22、16、13共51条命令,其中29条命令甚至超越了SAG CLI中原有的定义,功能强大而灵活。它还包括标准的错误代码集、标准的连接和登录DBMS方法、标准的数据类型表示等。
由于ODBC思想上的先进性,且没有同类的标准或产品与之竞争,它一枝独秀,推出后仅仅两三年就受到了众多厂家与用户的青睐,成为一种广为接受的标准。目前,已经有130多家独立厂商宣布了对ODBC的支持,常见的DBMS都提供了ODBC的驱动接口,这些厂商包括Oracle、Sybase、Informix、Ingres、IBM(DB/2)、DEC(RDB)、HP(ALLBASE/SQL)、Gupta、Borland(Paradox)等。目前,ODBC已经成为客户机/服务器系统中的一个重要支持技术。
二、ODBC的基本思想与特点
ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。
这同时也就是数据库驱动的思想,它很类似于Windows中打印驱动的思想。在Windows中,用户安装不同的打印驱动程序,使用同样一条打印语句或操作,就可很容易地实现在不同打印机上打印输出,而不需要了解内部的具体原理。ODBC出现以后,用户安装不同的DBMS驱动就可用同样的SQL语句实现在不同DBMS上进行同样的操作,而且无需预编译。ODBC带来了数据库连接方式的变革,如图1所示。在传统方式中,开发人员要熟悉多个DBMS及其API,一旦DBMS端出现变动,则往往导致用户端系统重新编建或者源代码的修改,这给开发和维护工作带来了很大困难。在ODBC方式中,不管底层网络环境如何,也无论采用何种DBMS,用户在程序中都使用同一套标准代码,无需逐个了解各DBMS及其API的特点,源程序不因底层的变化而重新编建或修改,从而减轻了开发维护的工作量,缩短了开发周期。
概括起来,ODBC具有以下灵活的特点:
1. 使用户程序有很高的互操作性,相同的目标代码适用于不同的DBMS;
2. 由于ODBC的开放性,它为程序集成提供了便利,为客户机/服务器结构提供了技术支持;
3. 由于应用与底层网络环境和DBMS分开,简化了开发维护上的困难。
三、ODBC的体系结构和实现
ODBC是依靠分层结构来实现的,如此可保证其标准性和开放性。图2所示为ODBC的体系结构,它共分为四层:应用程序、驱动程序管理器、驱动程序和数据源。微软公司对ODBC规程进行了规范,它为应用层的开发者和用户提供标准的函数、语法和错误代码等,微软还提供了驱动程序管理器,它在Windows中是一个动态链接库即ODBC.DLL。驱动程序层由微软、DBMS厂商或第三开发商提供,它必须符合ODBC的规程,对于Oracle,它是ORA6WIN.DLL,对于SQL Server,它是SQLSRVR.DLL。
下面我们详细介绍各层的功能。
1. 应用程序层(Application)
使用ODBC接口的应用程序可执行以下任务:
①请求与数据源的连接和会话(SQLConnect); ②向数据源发送SQL请求(SQLExecDirct或SQLExecute); ③对SQL请求的结果定义存储区和数据格式; ④请求结果; ⑤处理错误; ⑥如果需要,把结果返回给用户; ⑦对事务进行控制,请求执行或回退操作(SQLTransact); ⑧终止对数据源的连接(SQLDisconnect)。
2. 驱动程序管理器(Driver Manager)
由微软提供的驱动程序管理器是带有输入库的动态连接库ODBC.DLL,其主要目的是装入驱动程序,此外还执行以下工作:
①处理几个ODBC初始化调用;
②为每一个驱动程序提供ODBC函数入口点;
③为ODBC调用提供参数和次序验证。
3. 驱动程序(Driver)
驱动程序是实现ODBC函数和数据源交互的DLL,当应用程序调用SQL Connect或者SQLDriver Connect函数时,驱动程序管理器装入相应的驱动程序,它对来自应用程序的ODBC函数调用进行应答,按照其要求执行以下任务:
①建立与数据源的连接;
②向数据源提交请求;
③在应用程序需求时,转换数据格式;
④返回结果给应用程序;
⑤将运行错误格式化为标准代码返回;
⑥在需要时说明和处理光标。
以上这些功能都是对应用程序层功能的具体实现。驱动程序的配置方式可以划分为以下两种。
(1)单层次(single-tier) 这种方式下,驱动程序要处理ODBC调用SQL语句,并直接操纵数据库,因此具有数据存取功能。这种配置最常见的是同一台微机之上异种数据库通过ODBC存取,如在Powerbuilder中存取XBase、Excel、Paradox等数据文件,如图3所示。@@12W03502.GIF;图3 一层配置示意图@@
(2)多层次(multiple-tier) 这种配置中驱动程序仅仅处理ODBC调用,而将SQL语句交给服务器执行,然后返回结果。这种情况往往是应用程序、驱动程序管理器、驱动程序驻留在客户机端,而数据源和数据存取功能放在服务器端。譬如用Foxpro或Excel存取SQL Server或Oracle上的数据,如图4所示。
有时在以上两者之间加上网关以解决通信协议的转换等问题,这时驱动程序要将请求先传送给网关,如访问DEC RDB和IBM AS/400时的配置,如图5所示。
4. 数据源数据源由用户想要存取的数据和它相关的操作系统、DBMS及网络环境组成。
四、一致性级别
从应用程序观点来看,最理想的情况是每个数据源和驱动程序都支持同一套ODBC函数调用和SQL语句。但是由于形形色色的DBMS在实现上有很大的差异,它们所依赖的系统和环境也各不相同,在对ODBC支持的程度上就不一致。一致性级别(Conformance Levels)建立了对众多功能的标准划分,为应用程序和驱动程序提供帮助和选择的依据。它划定了驱动程序所支持的ODBC函数和SQL语句的范围,我们可以用SQLGetInfo、SQLGetFunctions、SQLTypeInfo三个函数获知驱动程序所支持的功能集。
ODBC从API和SQL语法两方面划分级别。
1. API的一致性
ODBC将函数调用划分为三级。
(1)核心API 它包括了与SAG的CLI相匹配的基本功能,包括:分配与释放环境、连接及语句句柄;连接到数据源;准备并执行SQL语句或立即执行SQL语句;为SQL语句和结果列中的参数分配存储器;从结果中检索数据,检索结果的信息;提交和撤消事务处理;检索错误信息。
(2)一级API 它包括了核心API的全部功能,比如用特定驱动程序的对话框连接到数据源;设置和查询语句值和连接选项;送部分或全部参数值;检索部分和全部结果;检索目录信息;检索关于驱动程序和数据源的信息。
(3)二级API 其功能包括核心和一级API的全部功能;浏览可获得的连接和可获得的数据源列表;发送参数值数组,检索结果数组;检索参数个数及参数描述;应用可卷动的光标;检索SQL语句和本机表格;检索各种目录信息;调用转换DLL。
2. SQL语法的一致性级别
从SQL方面可划分为最小的SQL语法、核心SQL语法和扩展SQL语法三个等级。
五、ODBC的应用与前景
ODBC的出现给用户描绘了一个诱人的前景,即网络中的Windows用户可以方便地访问各种数据库。现在,在微软推出的许多产品中都提供了ODBC支持,如Visal Basic 3.0、Visal C1.5、Excel 5.0、Word 6.0、FoxPro、Access等。同时其他一些应用软件和开发工具也提供了对ODBC的支持。因此用户只要安装不同的ODBC驱动程序,就可存取相应的数据库产品,而不管用户使用何种前台应用软件,也不管后台是何种数据库,这个存取的过程是一致的。
但是由于ODBC产生的时间还不长,其应用也同时存在着一些问题。首先,它的层次比较多,表现在性能上比专有的API要慢,这是其标准化和开发性所带来的必要的代价;其次,由于ODBC规定了三个层次的一致性级别,应用程序与驱动程序之间的匹配就会出现一些问题和矛盾,比如某些驱动程序支持的级别比较低,而应用程序要求的比较高;再者,由于不同的驱动程序为不同的开发商所开发,测试工作不能统一,而现有的开发和测试工具并不很完善;同时,在非SQL的数据库系统上的应用也存在一些问题。
微软公司将ODBC作为一项很重要的技术,它已承诺进一步改进ODBC技术,为驱动程序开发者提供更先进的开发和测试工具,还将交付系统管理和监控工具,它还将与DBMS厂商和第三方厂商建立更密切的合作,以期使驱动程序支持更高级别的一致性,并在规范化方面有所完善。目前,ODBC已为数据库供应商组织内部所认可,同时为众多应用软件厂商和第三方开发商所使用,相信随着SQL的推广和规范,用户和开发商会更加依赖于这一技术.