ODBC Programmer Reference中文...

ODBC概述
Open Database Connectivity(ODBC)是一种被广泛认可的数据访问的API。它是基于Call-Level Interface(CLI)规范的一种数据库API,并使用Structured Query Language(SQL)作为它的数据库访问语言,这个规范是由X/Open和ISO/IEC定制的。
ODBC的其中一个设计目标就是最大的互操作性,即一个应用程序使用同一份源代码可以访问不同的Database Management Systems(DBMSs)。数据库应用程序去调用ODBC接口,而这些接口是由专门的数据库模块(driver)实现的。driver概念的使用将应用程序和各个数据库的接口调用分离开来,并使这些访问数据库的操作都以一种方式呈现,就像是打印机驱动程序将字处理程序和各个打印机命令分离的效果一样。因为drivers是在run time被加载进程序的,所以用户只需将一个访问新DBMS的driver添加进来就可以了,而且不需要重新编译或者重新链接应用程序。

ODBC的起因

以前,一些公司只使用同一种DBMS。所有的数据库访问工作都是在操作系统的中或者是在运行管理该操作系统的应用程序中完成的。然而,当计算机技术的发展和更多的计算机硬件和软件的出现,一些公司开始需要一些不同的DBMS。原因有很多,如人们总是去购买那些最便宜的,性能最好的,他们最了解的,市场上最新的,在单个应用程序上工作的最好的。而其他的原因是由于那些组织者和管理者。
PC的出现使这件事情变得越来越复杂。这些计算机成了查询、分析和显示数据工具的一个载体,而且它们比较便宜,易于使用。从那时开始,一些公司经常将在客户端,服务端和微型计算机之间传送数据,并将数据存储在一些不相容的数据库中,然后使用大量的工具进行数据访问工作,而这些工具很少能够访问全部数据
C/S结构的出现作为这种状况的最终转折点,由于这种结构能过更有效的利用计算机资源。便宜的PC作为客户端,提供浏览数据的图形界面和作为一些便宜的工具的载体,如分页程序,图表程序和报表生成程序。微型计算机和承载着DBMSs的服务器,可以利用他们的计算能力和中心位置提供一个快速的数据存储功能。但是如何使一个前端的软件连接到一个后台的数据库呢?
独立的软件开发商也面临着一个同样的问题,开发商为客户端和服务器编写软件经常需要去写另外的版本去对应每一个DBMS,这也就意味着需要花费大量的资源去维护数据库访问程序而不是具有实际功能的应用程序,并且这些软件能否卖出去并不是只看它们的实际功能,还得看看他们是否能够访问给定的某个DBMS。
程序员所需要的是一种能够访问不同的DBMS的方法,而服务器和客户端所需要的是一个能够整合不同DBMS中的数据的应用程序,总之,我们需要的就是一种可以提供互相操作的访问数据的方法:一种开放的数据库连接平台。

什么是ODBC

现在在计算机界关于ODBC的理解有很多误区,对于终端用户而言,它只是microsoft操作系统中的控制面板里面的一个小图标。对于应用程序开发人员它只是一个包含数据库访问函数的库。还有很多人认为ODBC可以解决数据库访问时所遇到所有的问题。

首先,ODBC是数据库API的一个规范,这个API是独立于任何一个DBMS或者操作系统的;尽管这个手册使用的是C,但ODBC API是语言无关的。ODBC API是基于X/OPEN和ISO/IEC的CLI标准的规范。ODBC 3.x实现了所有的以前版本的功能并添加了一些功能,基于图形的数据库应用程序经常会用到他们,例如scrollable cursors。

ODBC API中的函数是由DBMS driver所实现的。应用程序通过调用这些driver所提供的函数,以一种独立于DBMS的方式去访问数据。而Driver Manager是用来管理应用程序和驱动程序间交互的程序。

尽管Microsoft在操作系统上(Window NT, Server/ Windows 2000 Server, Windows NT Workstation/Windows 2000 Professional,Windows 95/98)提供了Driver Manager,并编写了很多ODBC driver,他们的一些应用程序也调用了这些ODBC的接口,但是任何人都是可以去写ODBC driver和相关应用程序的。事实上,在上述的操作系统中运行的ODBC driver和相关的应用程序,大部分都是由其它的公司完成的。此外,ODBC dirver和相关的应用程序也应能够运行在Macintosh和各种UNIX平台上。

为了帮助开发应用程序和driver的程序员,Microsoft在自己的平台上提供了ODBC Software Development Kit(SDK),它包括Driver Manager,dll,测试工具和一些例程。Microsoft和Visigenic Software联合发布一些能在Macintosh和各种UNIX平台下运行的SDK。

对于理解这一点非常重要,就是ODBC的设计目标是用来揭示数据库的功能而非补充它。因此,应用程序的开发者不应该指望只通过ODBC就可以将一个简单的数据库变成一个功能完备的关系数据库引擎。同样driver的开发者也不应期望通过ODBC去实现底层数据库并不支持的功能,当然也有一些例外,例如开发者去编写一个driver,这个driver引擎是直接访问文件数据的,但又被要求要提供一些SQL的最基本的功能;还有比如Microsoft的MDAC SDK提供的一个游标库组件,它通过模拟scrollable cursor去协助driver实现一些特定层次的功能。

应用程序在使用ODBC时应自己去实现cross-database的一些功能。例如,ODBC不是一个异构的链接引擎,也不是一个分布式交互处理器,然而,由于它是独立于DBMS的,所以它可以被用来构建cross-dtabase工具

ODBC和CLI标准

ODBC在处理Call-Level Interface时遵循以下规则和标准。(ODBC所表现出的特性是下列标准的超集)
    * The X/Open CAE Specification "Data Management: SQL Call-Level Interface (CLI)"
    * ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)

本文描述了以下事实:

    * 一个在X/Open和ISO CLI规范下所写的程序,当它在编译时加入ODBC 3.x的头文件和库文件时,就可以通过ODBC 3.x Driver Manager去访问驱动程序,从而使这个应用程序可以使用ODBC 3.x的驱动或者一个标准规格的驱动。
    * 一个在X/Open和ISO CLI规范下所写的驱动程序,当它在编译时加入ODBC 3.x的头文件和库文件时,就可以通过ODBC 3.x Driver Manager去访问驱动程序,从而使这个驱动程序可以使用ODBC 3.x的驱动或者一个标准规格的驱动。(参照第17章“程序设计理解”中的"标准规格应用程序和驱动程序"一节获取更详细的叙述)

“核心一致性接口层”包括ISO CLI中所有特性和X/Open CLI中的必选特性,X/Open CLI中的可选特性会出现在更高的“一致性接口层”中。因为所有ODBC 3.x驱动都必须支持“核心一致性接口层”中的特性,所以:

    * 一个ODBC 3.x驱动必须支持标准规格应用程序所使用的所有有关特性。
        * 一个ODBC 3.x应用程序只能在使用ISO CLI的特性和X/Open CLI的必选特性时,才能保证它可以正常使用任何一个标准规格的驱动程序。

此外在ISO/IEC和X/Open CLI规范所包含的CLI规范中,ODBC实现以下特性(有些特性是ODBC的以前的版本已经实现的)

    * 通过一次调用取多条记录
    * 绑定参数数组 
    * 关于Bookmark的支持,包括从bookmark取数据,变量长度bookmark,和通过bookmark操作在不连续的记录中批量更新和批量删除的功能
    * 以记录为单位进行绑定
    * 绑定偏移
    * Support for batches of SQL statements, either in a stored procedure or as a sequence of SQL statements executed through SQLExecute or SQLExecDirect
    * 支持执行多条SQL语句,包括1)在存储过程中的多条SQL语句的执行,2)通过SQLExecute或者SQLExecDirect执行的多条SQL语句序列
    * 能够得到游标记录的数目
    * 支持定位更新,删除操作和通过函数(SQLSetPos)批量删除和更新的操作
    * 支持目录函数,它能够在不需要元信息视图的情况下从schema中提取信息。
    * Escape sequences for outer joins, scalar functions, datetime literals, interval literals, and stored procedures
    * 提供code-page翻译库
    * 能够回馈一个驱动关于ANSI一致性层次和SQL的支持程度
    * 能够即时的自动遍历访问参数描述符
    * 加强对于记录和参数状态数组的诊断功能
    * 支持Datatime,interval,numeric/decimal,和64-bit integer的数据类型
    * 异步执行
    * 支持存储过程,包括escape sequences,输出参数绑定机制,和目录函数
    * 增强链接功能,包括链接属性设置和属性的浏览
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值