一种数据访问
应用程序接口(
API),支持对可使用 ODBC
驱动程序的任何数据源的访问。
1. 产生和发展
关系型数据库产生后很快就成为
数据库系统的主流产品,由于每个DBMS厂商都有自己的一套标准,人们很早就产生了标准化的想法,于是产生了SQL,由于其语法规范逐渐为人所接受,成为RDBMS上的主导语言。最初,各数据库厂商为了解决互连的问题,往往提供嵌入式SQL API,用户在客户机端要操作系统中的RDBMS时,往往要在程序中嵌入SQL语句进行
预编译。由于不同厂商在数据格式、数据操作、具体实现甚至语法方面都具有不同程度的差异,所以彼此不能兼容。
长期以来,这种API的非规范情况令用户和RDBMS厂商都不能满意。在80年代后期,一些著名的厂商结成了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思想上的先进性,且没有同类的标准或产品与之竞争,它一枝独秀,推出后仅仅两三年就受到了众多厂家与用户的青睐,成为一种广为接受的标准。常见的DBMS都提供了ODBC的驱动接口。ODBC成为
客户机/服务器系统中的一个重要支持技术。
2. 基本思想与特点
ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共
编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。
这同时也就是数据库驱动的思想。ODBC出现以后,用户安装不同的DBMS驱动就可用同样的SQL语句实现在不同DBMS上进行同样的操作,而且无需预编译。ODBC带来了数据库连接方式的变革。在传统方式中,开发人员要熟悉多个DBMS及其API,一旦DBMS端出现变动,则往往导致用户端系统重新编建或者
源代码的修改,这给开发和维护工作带来了很大困难。在ODBC方式中,不管底层网络环境如何,也无论采用何种DBMS,用户在程序中都使用同一套标准代码,无需逐个了解各DBMS及其API的特点,
源程序不因底层的变化而重新编建或修改,从而减轻了开发维护的工作量,缩短了开发周期。
概括起来,ODBC具有以下灵活的特点:
1)使
用户程序有很高的
互操作性,相同的
目标代码适用于不同的DBMS;特定 DBMS 的一个 ODBC 驱动程序允许任何已启用 ODBC 的应用程序成为 ODBC 客户端。
2)由于ODBC的开放性,它为程序集成提供了便利,为客户机/服务器结构提供了技术支持。
3)由于应用与底层网络环境和DBMS分开,简化了开发维护上的困难。应用程序开发人员不需要修改他们的应用程序,即可让它们可以访问多个后端中的数据。只要特定后端有 ODBC 驱动程序,支持 ODBC 的前端可以访问它。
3. 体系结构和实现
ODBC是依靠
分层结构来实现的,如此可保证其标准性和开放性。ODBC共分为四层:应用程序、驱动程序管理器、驱动程序和
数据源。微软公司对ODBC规程进行了规范,它为应用层的开发者和用户提供标准的函数、语法和错误代码等,微软还提供了驱动程序管理器,它在Windows中是一个动态链接库即ODBC.DLL。驱动程序层由微软、DBMS厂商或第三开发商提供,它必须符合ODBC的规程,对于Oracle,它是ORA6WIN.DLL,对于SQL Server,它是SQLSRVR.DLL。
3.1应用程序层
使用ODBC接口的应用程序可执行以下任务:①请求与
数据源的连接和会话(SQLConnect); ②向数据源发送SQL请求(SQLExecDirct或SQLExecute); ③对SQL请求的结果定义存储区和数据格式; ④请求结果; ⑤处理错误; ⑥如果需要,把结果返回给用户; ⑦对
事务进行控制,请求执行或回退操作(SQLTransact); ⑧终止对数据源的连接(SQLDisconnect)。
3.2驱动程序管理器
由微软提供的驱动程序管理器是带有输入库的
动态连接库ODBC.DLL,其主要目的是装入驱动程序,此外还执行以下工作:
①处理几个ODBC初始化调用;
③为ODBC调用提供参数和次序验证。
3.3驱动程序(Driver)
驱动程序是实现ODBC函数和数据源交互的DLL,当应用程序调用SQL Connect或者SQLDriver Connect函数时,驱动程序管理器装入相应的驱动程序,它对来自应用程序的ODBC
函数调用进行应答,按照其要求执行以下任务:①建立与
数据源的连接;②向数据源提交请求;③在应用程序需求时,转换数据格式;④返回结果给应用程序;⑤将运行错误格式化为标准代码返回;⑥在需要时说明和处理光标。
以上这些功能都是对应用程序层功能的具体实现。驱动程序的配置方式可以划分为以下两种。
1)单层次(single-tier)这种方式下,驱动程序要处理ODBC调用SQL语句,并直接操纵数据库,因此具有数据存取功能。这种配置最常见的是同一台微机之上异种数据库通过ODBC存取,如在Powerbuilder中存取XBase、Excel、Paradox等数据文件。
2)多层次(multiple-tier)这种配置中驱动程序仅仅处理ODBC调用,而将SQL语句交给服务器执行,然后返回结果。这种情况往往是应用程序、驱动程序管理器、驱动程序驻留在客户机端,而数据源和数据存取功能放在服务器端。譬如用Foxpro或Excel存取SQL Server或Oracle上的数据。
有时在以上两者之间加上
网关以解决
通信协议的转换等问题,这时驱动程序要将请求先传送给网关。
3.4数据源
由用户想要存取的数据和它相关的操作系统、DBMS及网络环境组成。
4. 一致性级别
从应用程序观点来看,最理想的情况是每个数据源和
驱动程序都支持同一套ODBC
函数调用和SQL语句。但是由于形形色色的DBMS在实现上有很大的差异,它们所依赖的系统和环境也各不相同,在对ODBC支持的程度上就不一致。一致性级别(Conformance Levels)建立了对众多功能的标准划分,为应用程序和驱动程序提供帮助和选择的依据。它划定了驱动程序所支持的ODBC函数和SQL语句的范围,我们可以用SQLGetInfo、SQLGetFunctions、SQLTypeInfo三个函数获知驱动程序所支持的功能集。
ODBC从API和SQL语法两方面划分级别。
4.1API的一致性
1)核心API 它包括了与SAG的CLI相匹配的基本功能,包括:分配与释放环境、连接及语句句柄;连接到数据源;准备并执行SQL语句或立即执行SQL语句;为SQL语句和结果列中的参数分配存储器;从结果中检索数据,检索结果的信息;提交和撤消事务处理;检索错误信息。
2)一级API 它包括了核心API的全部功能,比如用特定
驱动程序的对话框连接到
数据源;设置和查询语句值和连接选项;送部分或全部参数值;检索部分和全部结果;检索目录信息;检索关于驱动程序和数据源的信息。
3)二级API 其功能包括核心和一级API的全部功能;浏览可获得的连接和可获得的数据源列表;发送参数值
数组,检索结果数组;检索参数个数及参数描述;应用可卷动的光标;检索SQL语句和本机表格;检索各种目录信息;调用转换DLL。
4.2SQL语法的一致性级别
从SQL方面可划分为最小的SQL语法、核心SQL语法和扩展SQL语法三个等级。
ODBC现在看来是一个比较古老的东西,在1996年左右就比较定型了,其最新的版本是 3.8,MICROSOFT也不打算对它做什么大的更新。然而,正因为它是一个比较成熟和古老的规范,ODBC在大多数DBMS上都可以使用,可以说一个像样的DBMS都应该支持ODBC 3.0或以上的版本。
5. 使用 ODBC 的示例
1)Access 前端使用 Oracle ODBC 驱动程序(Access 1.1 随附)访问 Oracle 后端的数据。
2)Visual Basic 前端使用 dBASE ODBC 驱动程序(它是 MS ODBC 数据库驱动程序包的一部分)访问 dBASE 后端的数据。
3)使用 C+ODBC SDK+Win SDK 编写的 C 应用程序使用 Rochester Software 提供的 AS/400 ODBC 驱动程序访问 AS/400 中的数据。