ODBC编写的应用程序可移植性好,能同时访问不同的数据库,共享多个数据资源。

一、ODBC概述

ODBC是为了解决连接不同关系数据库管理系统的方法、技术和软件,使数据库系统“开放”,能够实现“数据库互连”这些问题的接口标准。它是微软公司开放服务体系(WOSA)中有关数据库的一个组成部分,它建立了一组规范,并提供一组访问数据库的应用程序接口(API)。ODBC具有两重功效或约束力:一方面规范应用开发,另一方面规范数据库管理系统应用接口。

二、ODBC工作原理概述

ODBC应用系统的体系结构图示:
ODBC应用系统的体系结构
有图可知:ODBC应用系统由用户应用程序、ODBC驱动程序管理器、数据库驱动程序、数据源构成。

1. 用户应用程序

用户应用程序提供用户界面、应用逻辑和事务逻辑。使用ODBC开发数据库应用程序时,应用程序调用的是标准的ODBC函数和SQL语句。应用层使用ODBC API调用接口与数据库进行交互。使用ODBC来开发应用系统的程序简称ODBC应用程序,包括:
1. 请求连接数据库。
2. 向数据源发送SQL语句。
3. 为SQL语句执行结果分配存储空间,定义所读取的数据格式。
4. 获取数据库操作结果或处理错误。
5. 进行数据处理并向用户提交处理结果。
6. 请求事务的提交和回滚操作。
7. 断开与数据源的连接。

2. ODBC驱动程序管理器

驱动程序管理器用来管理各种驱动程序。ODBC驱动程序管理器由微软公司提供,它包含在ODVC32.DLL中,对用户是透明的,管理应用程序和驱动程序之间的通信。ODBC驱动程序管理器主要功能包含装载ODBC驱动程序、选择和连接正确的驱动程序、管理数据源、检查ODBC调用参数的合法性及记录ODBC函数的调用等,当应用层需要时返回驱动程序的有关信息。
ODBC驱动程序管理器可以建立、配置或删除数据源,并查看系统当前所安装的数据库ODBC驱动程序。

3. 数据驱动程序

ODBC通过数据库驱动程序来提供应用系统与数据库平台的独立性。
ODBC应用程序不能直接存储数据库,其各种操作请求由驱动程序管理器提交给某个关系数据库管理系统的ODBC驱动程序,通过调用驱动程序所支持的函数来存取数据库。数据库的操作结果也通过驱动程序返回给应用程序。如果应用程序要操纵不同的数据库,就要动态地链接到不同的驱动程序上。

ODBC驱动程序
  1. 单束
    数据库和应用程序在同一台机器上,驱动程序直接完成对数据文件的I/O操作,这时驱动程序相当于数据管理器。
  2. 多束
    支持客户机-服务器、客户机-应用服务器/数据库服务器等网络环境下的数据访问,这时由驱动程序完成数据库访问请求的提交和结果集接收,应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据。
4. ODBC数据源管理

数据源是最终用户要访问的数据,包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
ODBC给每个被访问的数据源指定唯一的数据源名(DSN),并映射到所有必要的、用来存取数据的低层软件。在连接中,用数据源名来代表用户名、服务器名、所连接d 数据库名等。最终用户无须知道数据库管理系统或其他数据库管理软件、网络以及有关ODBC驱动程序的细节,数据源对最终用户是透明的。

三、ODBC API基础

ODBC应用程序编程接口(ODBC API)要符合:
1. API一致性,包括核心级、扩展1级、扩展2级。
2. 语法一致性,包括最低限度SQL语法级、核心SQL语法级、扩展SQL语法级。

1. 函数概述

ODBC3.0标注提供了76函数接口,大致分为:
1. 分配和释放环境句柄、连接句柄、语句句柄。
2. 连接函数。
3. 与信息相关的函数。
4. 事务处理函数。
5. 执行相关函数。
6. 编目函数。应用程序可以通过编目函数(如SQLTables、SQLColmn)的调用来获取数据字典的信息。

2. 句柄机其属性

句柄是32位整数值,代表一个指针。ODBC3.0中句柄可以分为环境、连接、语句和描述符句柄4类,对于每种句柄,不同的驱动程序有不同的数据结构。
应用程序句柄之间的关系图示:
应用程序句柄之间的关系
1. 每个ODBC应用程序需要建立一个ODBC环境,分配一个环境句柄,存取数据的全局性背景。
2. 一个环境句柄可以建立多个连接句柄,每一个连接句柄实现与一个数据源之间的连接。
3. 在一个连接中可以建立多个语句句柄,它不只是一个SQL语句,还包括SQL语句产生的结果集以及相关的信息等。
4. 在ODBC 3.0中又提出了描述句柄的概念,它是描述SQL语句的参数、结果集列的元数据集合。

3. 数据类型

ODBC定义了两套数据类型:SQL数据类型和C数据类型。
SQL数据类型用于数据源,C数据类型用于应用程序的C代码。SQL数据通过SQLBindcol从结果集列中返回到应用程序变量;如果SQL语句含参数,应用程序为每个参数调用SQLBindparameter,并把它们绑定至应用程序变量。应用程序可以通过SQLGetTypeInfo来获取不同的驱动程序对于数据类型的支持情况。

四、ODBC的工作流程

使用ODBC的应用系统大致的工作流程:
ODBC工作流程

1. 配置数据源
  1. 运行数据管理工具来进行配置
  2. 使用Driver Manager提供的ConfigDsn函数来增删改数据源。这种方法特别适用于在应用程序中创建临时使用的数据源。
2. 初始化环境

由Driver Manager来进行控制并配置环境属性,直到应用程序通过调用连接函数和某个数据源进行连接后,Driver Manager才调用多连的驱动程序中的SQLAllcoHandle来真正分配环境句柄的数据结构。

3. 建立连接

应用程序用SQLAllocHandle分配连接句柄,通过SQLConnect、SQLDriverConnect或SQLBroeseConnect与数据源连接。其中SQLConnect是最简单的连接函数,输出参数为配置好的数据源名称、用户ID和口令。

4. 分配语句句柄

在处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄。语句句柄含有具体的SQL语句以及输出的结果集等信息。在后面的执行函数中,语句句柄都是没有必要的输入参数。
应用程序还可以通过SQLtStmtAttr来设置语句属性。

5. 执行SQL语句

应用程序处理SQL语句的方式:预处理或直接执行。如果SQL语句含有参数,应用程序为每个参数调用SQLBindParameter,并把它们绑定至应用程序变量。这样应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态改变SQL语句的具体执行。接下来的操作则会根据语句类型来进行相应处理。
1. 对于有结果集的语句(select或是编目函数),则进行结果集处理。
2. 对于没有结构集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行技术(本次执行所影响的行数)之后继续执行。

6. 结果集处理

应用程序可以通过SQLNubResultCols来获取结果集中的列数,通过SQL DescribeCol或是SQLColAttrbute函数来获取结果集每一列的名称、数据类型、精度和范围。
ODBC中使用游标来处理结果集数据。游标可分为forward-only游标和可滚动游标。Foward-only游标只能在结果集中向前滚动,它是ODBC的默认游标类型。可滚动游标又可以分为静态、动态、码集驱动和混合型驱动4种。
ODBC游标的打开方式不同于嵌入式SQL,不是显式声明而是系统自动产生一个游标,当结果集刚刚生成时,游标指向第一行数据之前。应用程序通过SQLBindCol把查询结果绑定到应用程序缓冲区中,通过SQLFetch或是SQLFetchScroll来移动游标获取结果集中的每一行数据。

7. 中止处理

处理接收后,应用程序将首先释放语句句柄,然后释放数据库连接并与数据库服务器断开,最后释放ODBC环境。

Logo

快速构建 Web 应用程序

更多推荐