《数据库基础与应用第09章开放数据库互连.ppt》由会员分享,可在线阅读,更多相关《数据库基础与应用第09章开放数据库互连.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第9章章 开放数据库互连开放数据库互连(ODBC)9.1 数据库互连概述数据库互连概述9.2 ODBC的工作原理概述的工作原理概述9.3 使用使用ODBC的系统结构的系统结构9.4 ODBC驱动程序的分类驱动程序的分类9.5 ODBC的工作流程的工作流程退出退出9.1 数据库互连概述数据库互连概述提提出出和和产产生生ODBC的的根根本本原原因因是是不不同同的数据库管理系统的存在。的数据库管理系统的存在。目目前前,广广泛泛使使用用的的关关系系数数据据库库管管理理系系统统(RDBMS)有有几几十十种种,最最常常用用的的也也有有十几种。十几种。它们之间有许多差异。例如:它们之间有许多差异。例如:它
2、们之间有许多差异。例如:它们之间有许多差异。例如:支支支支持持持持和和和和实实实实现现现现SQLSQL语语语语句句句句的的的的程程程程度度度度不不不不同同同同(有有有有的的的的支支支支持持持持SQL89SQL89的的的的基基基基本本本本集集集集,有有有有的的的的支支支支持持持持SQL92SQL92的的的的基基基基本集);本集);本集);本集);SQLSQL语语语语句句句句实实实实现现现现的的的的策策策策略略略略和和和和细细细细节节节节有有有有许许许许多多多多不不不不同;同;同;同;支持的数据类型和精度常常不同;支持的数据类型和精度常常不同;支持的数据类型和精度常常不同;支持的数据类型和精度常常
3、不同;提供的应用编程接口(提供的应用编程接口(提供的应用编程接口(提供的应用编程接口(Application Application Programming InterfaceProgramming Interface,简记为,简记为,简记为,简记为APIAPI)不同;)不同;)不同;)不同;嵌入式嵌入式嵌入式嵌入式SQLSQL语言语法细节不同;语言语法细节不同;语言语法细节不同;语言语法细节不同;存储过程不同。存储过程不同。存储过程不同。存储过程不同。因此,在某个因此,在某个因此,在某个因此,在某个RDBMSRDBMS下开发的应用系统下开发的应用系统下开发的应用系统下开发的应用系统就不能在另
4、一个就不能在另一个就不能在另一个就不能在另一个RDBMSRDBMS下运行。下运行。下运行。下运行。使使使使数数数数据据据据库库库库系系系系统统统统“开开开开放放放放”,能能能能够够够够彼彼彼彼此此此此相相相相互互互互通通通通信信信信、相相相相互互互互操操操操作作作作、相相相相互互互互访访访访问问问问,简简简简言言言言之之之之能能能能够够够够“数数数数据据据据库库库库 互互互互 连连连连”。其其其其 中中中中 开开开开 放放放放 数数数数 据据据据 库库库库 互互互互 连连连连(Open Open DataBase DataBase ConnectingConnecting,简简简简记记记记为为
5、为为ODBCODBC),是是是是MicrosoftMicrosoft公公公公司司司司推推推推出出出出的的的的产产产产品品品品。由由由由于于于于MicrosoftMicrosoft公公公公司司司司的的的的地地地地位位位位,ODBCODBC成成成成为为为为数数数数据据据据库库库库之之之之间间间间互互互互连连连连的的的的事事事事实实实实标标标标准。准。准。准。9.2 ODBC的工作原理概述的工作原理概述开开开开 放放放放 数数数数 据据据据 库库库库 互互互互 连连连连(ODBCODBC)接接接接 口口口口 是是是是MicrosoftMicrosoft公公公公司司司司开开开开放放放放的的的的服服服服
6、务务务务结结结结构构构构(WOSAWOSA)中中中中有有有有关关关关数数数数据据据据库库库库的的的的一一一一个个个个组组组组成成成成部部部部分分分分,用用用用于于于于访访访访问问问问数数数数据据据据库库库库的的的的标标标标准准准准调调调调用用用用接接接接口口口口。使使使使用用用用ODBCODBC接接接接口口口口的的的的应应应应用用用用程程程程序序序序可可可可以以以以访访访访问问问问多多多多种种种种不不不不同同同同的的的的数数数数据据据据库库库库系系系系统统统统,同同同同时时时时应应应应用用用用程程程程序序序序对对对对数数数数据据据据库库库库的的的的操操操操作作作作不不不不依依依依赖赖赖赖于于于
7、于任任任任何何何何数数数数据据据据库库库库管管管管理理理理系系系系统统统统,实现应用程序对不同实现应用程序对不同实现应用程序对不同实现应用程序对不同DBMSDBMS资源的共享。资源的共享。资源的共享。资源的共享。为了使一个应用程序能访问不同的数据库为了使一个应用程序能访问不同的数据库为了使一个应用程序能访问不同的数据库为了使一个应用程序能访问不同的数据库系统,人们设想如果应用程序使用标准的数据系统,人们设想如果应用程序使用标准的数据系统,人们设想如果应用程序使用标准的数据系统,人们设想如果应用程序使用标准的数据库调用接口来与数据库互操作,在应用系统和库调用接口来与数据库互操作,在应用系统和库调
8、用接口来与数据库互操作,在应用系统和库调用接口来与数据库互操作,在应用系统和不同的不同的不同的不同的RDBMSRDBMS之间加一层中间件之间加一层中间件之间加一层中间件之间加一层中间件数据库数据库数据库数据库调用转换接口,由该中间件把应用系统中对数调用转换接口,由该中间件把应用系统中对数调用转换接口,由该中间件把应用系统中对数调用转换接口,由该中间件把应用系统中对数据库的标准调用转换成对某一个特定的据库的标准调用转换成对某一个特定的据库的标准调用转换成对某一个特定的据库的标准调用转换成对某一个特定的RDBMSRDBMS的调用,如图的调用,如图的调用,如图的调用,如图9.19.1所示。这样,应用
9、程所示。这样,应用程所示。这样,应用程所示。这样,应用程序与具体的序与具体的序与具体的序与具体的RDBMSRDBMS平台相隔离,当应用程序平台相隔离,当应用程序平台相隔离,当应用程序平台相隔离,当应用程序连接的连接的连接的连接的RDBMSRDBMS平台改变时不必改写应用程序,平台改变时不必改写应用程序,平台改变时不必改写应用程序,平台改变时不必改写应用程序,提高了应用系统与提高了应用系统与提高了应用系统与提高了应用系统与RDBMSRDBMS的独立性,从而使的独立性,从而使的独立性,从而使的独立性,从而使应用系统具有良好的可移植性。这就是应用系统具有良好的可移植性。这就是应用系统具有良好的可移植
10、性。这就是应用系统具有良好的可移植性。这就是ODBCODBC的基本思想。的基本思想。的基本思想。的基本思想。ODBCODBC提供了一套数据库应用程序接口规提供了一套数据库应用程序接口规提供了一套数据库应用程序接口规提供了一套数据库应用程序接口规范。这套规范包括:为应用程序提供的一套调范。这套规范包括:为应用程序提供的一套调范。这套规范包括:为应用程序提供的一套调范。这套规范包括:为应用程序提供的一套调用层接口函数(用层接口函数(用层接口函数(用层接口函数(Call-Level InterfaceCall-Level Interface,简写为,简写为,简写为,简写为CLICLI)和基于动态连接
11、库的运行支持环境。)和基于动态连接库的运行支持环境。)和基于动态连接库的运行支持环境。)和基于动态连接库的运行支持环境。图图图图9.19.1中数据库调用转换接口则由中数据库调用转换接口则由中数据库调用转换接口则由中数据库调用转换接口则由ODBCODBC驱驱驱驱动程序管理器(动程序管理器(动程序管理器(动程序管理器(ODBC Driver ManagerODBC Driver Manager)和一)和一)和一)和一组组组组RDBMSRDBMS驱动程序(驱动程序(驱动程序(驱动程序(ODBC DriverODBC Driver)构成,)构成,)构成,)构成,如图如图如图如图9.29.2所示。所示。
12、所示。所示。ODBCODBC通过使用驱动程序通过使用驱动程序通过使用驱动程序通过使用驱动程序(driverdriver)来提供数据库独立性,进行数据库)来提供数据库独立性,进行数据库)来提供数据库独立性,进行数据库)来提供数据库独立性,进行数据库操作的数据源对应用程序是透明的,所有的数操作的数据源对应用程序是透明的,所有的数操作的数据源对应用程序是透明的,所有的数操作的数据源对应用程序是透明的,所有的数据库操作由对应的据库操作由对应的据库操作由对应的据库操作由对应的DBMS DBMS 的的的的ODBC DriverODBC Driver完成。完成。完成。完成。驱动程序是一个用以支持驱动程序是一
13、个用以支持驱动程序是一个用以支持驱动程序是一个用以支持ODBCODBC函数调用函数调用函数调用函数调用的模块(通常是一个的模块(通常是一个的模块(通常是一个的模块(通常是一个DLLDLL)。)。)。)。ODBCODBC的另一个组件是驱动程序管理器的另一个组件是驱动程序管理器的另一个组件是驱动程序管理器的另一个组件是驱动程序管理器(driver managerdriver manager)。驱动程序管理器由)。驱动程序管理器由)。驱动程序管理器由)。驱动程序管理器由MicrosoftMicrosoft公司提供。驱动程序管理器包含在公司提供。驱动程序管理器包含在公司提供。驱动程序管理器包含在公司提
14、供。驱动程序管理器包含在ODBC.DLLODBC.DLL(或在(或在(或在(或在3232位版的位版的位版的位版的ODBCODBC的的的的ODBC32.DLLODBC32.DLL中),可链接到所有中),可链接到所有中),可链接到所有中),可链接到所有ODBCODBC应用应用应用应用程序中。程序中。程序中。程序中。9.3 使用使用ODBC的系统结构的系统结构使使使使用用用用ODBCODBC开开开开发发发发应应应应用用用用系系系系统统统统时时时时,系系系系统统统统的的的的体体体体系系系系结构如图结构如图结构如图结构如图9.29.2所示,它由四部分构成:所示,它由四部分构成:所示,它由四部分构成:所示
15、,它由四部分构成:(1 1)应用程序。)应用程序。)应用程序。)应用程序。(2 2)驱驱驱驱动动动动程程程程序序序序管管管管理理理理器器器器(ODBC ODBC Driver Driver ManagerManager)。)。)。)。(3 3)数据库驱动程序()数据库驱动程序()数据库驱动程序()数据库驱动程序(ODBC DriverODBC Driver)。)。)。)。(4 4)数数数数据据据据库库库库平平平平台台台台,包包包包括括括括某某某某一一一一个个个个RDBMSRDBMS和和和和数据库。数据库。数据库。数据库。9.3.19.3.1应用程序应用程序应应应应用用用用层层层层的的的的应应应
16、应用用用用程程程程序序序序提提提提供供供供用用用用户户户户界界界界面面面面、应应应应用用用用逻逻逻逻辑辑辑辑和和和和事事事事务务务务逻逻逻逻辑辑辑辑。使使使使用用用用ODBCODBC开开开开发发发发数数数数据据据据库库库库应应应应用用用用程程程程序序序序时时时时,应应应应用用用用程程程程序序序序调调调调用用用用标标标标准准准准的的的的ODBCODBC函函函函数数数数和和和和SQLSQL语语语语句句句句。应应应应用用用用层层层层使使使使用用用用ODBCODBC调调调调用用用用接接接接口口口口与与与与数数数数据据据据库库库库进进进进行行行行交交交交互互互互。使使使使用用用用ODBCODBC的的的的
17、接接接接口口口口规规规规范范范范来来来来编编编编写写写写应应应应用用用用程程程程序时,应用程序应该包括的内容有:序时,应用程序应该包括的内容有:序时,应用程序应该包括的内容有:序时,应用程序应该包括的内容有:(1 1)请求连接数据库。)请求连接数据库。)请求连接数据库。)请求连接数据库。(2 2)向数据源发送)向数据源发送)向数据源发送)向数据源发送SQLSQL语句。语句。语句。语句。(3 3)为)为)为)为SQLSQL语句执行结果分配存储空间,语句执行结果分配存储空间,语句执行结果分配存储空间,语句执行结果分配存储空间,定义所读取的数据格式。定义所读取的数据格式。定义所读取的数据格式。定义所
18、读取的数据格式。(4 4)获取数据库操作结果;或处理错误。)获取数据库操作结果;或处理错误。)获取数据库操作结果;或处理错误。)获取数据库操作结果;或处理错误。(5 5)进行数据处理并向用户提交处理结)进行数据处理并向用户提交处理结)进行数据处理并向用户提交处理结)进行数据处理并向用户提交处理结果。果。果。果。(6 6)请求事务的提交和回滚操作。)请求事务的提交和回滚操作。)请求事务的提交和回滚操作。)请求事务的提交和回滚操作。(7 7)断开与数据源的连接。)断开与数据源的连接。)断开与数据源的连接。)断开与数据源的连接。下面将使用下面将使用下面将使用下面将使用ODBCODBC开发应用系统的应
19、用程开发应用系统的应用程开发应用系统的应用程开发应用系统的应用程序简称为序简称为序简称为序简称为ODBCODBC应用程序。应用程序。应用程序。应用程序。9.3.29.3.2驱动程序管理器驱动程序管理器驱动程序管理器是驱动程序管理器是驱动程序管理器是驱动程序管理器是MicrosoftMicrosoft公司公司公司公司ODBCODBC的的的的一部分。顾名思义,驱动程序管理器是用来管一部分。顾名思义,驱动程序管理器是用来管一部分。顾名思义,驱动程序管理器是用来管一部分。顾名思义,驱动程序管理器是用来管理系统中存在的各种驱动程序的。驱动程序管理系统中存在的各种驱动程序的。驱动程序管理系统中存在的各种驱
20、动程序的。驱动程序管理系统中存在的各种驱动程序的。驱动程序管理器的主要功能包括装载理器的主要功能包括装载理器的主要功能包括装载理器的主要功能包括装载ODBCODBC驱动程序、选驱动程序、选驱动程序、选驱动程序、选择和连接正确的驱动程序、管理数据源、检查择和连接正确的驱动程序、管理数据源、检查择和连接正确的驱动程序、管理数据源、检查择和连接正确的驱动程序、管理数据源、检查ODBCODBC调用参数的合法性和记录调用参数的合法性和记录调用参数的合法性和记录调用参数的合法性和记录ODBCODBC函数的函数的函数的函数的调用等,以及当应用层需要时提供驱动程序信调用等,以及当应用层需要时提供驱动程序信调用
21、等,以及当应用层需要时提供驱动程序信调用等,以及当应用层需要时提供驱动程序信息。息。息。息。9.3.39.3.3数据库驱动程序数据库驱动程序ODBCODBC是是是是通通通通过过过过驱驱驱驱动动动动程程程程序序序序来来来来提提提提供供供供应应应应用用用用系系系系统统统统与与与与数数数数据据据据库库库库平平平平台台台台的的的的独独独独立立立立性性性性的的的的。驱驱驱驱动动动动程程程程序序序序与与与与具具具具体体体体的的的的RDBMSRDBMS有关。有关。有关。有关。驱动程序的功能包括以下几个方面:驱动程序的功能包括以下几个方面:驱动程序的功能包括以下几个方面:驱动程序的功能包括以下几个方面:(1
22、1)建立与相应)建立与相应)建立与相应)建立与相应RDBMSRDBMS的连接。的连接。的连接。的连接。(2 2)向连接的)向连接的)向连接的)向连接的RDBMSRDBMS提交用户的提交用户的提交用户的提交用户的SQLSQL语语语语句。句。句。句。(3 3)根据应用程序的要求,将发送给该)根据应用程序的要求,将发送给该)根据应用程序的要求,将发送给该)根据应用程序的要求,将发送给该RDBMSRDBMS的数据以及从的数据以及从的数据以及从的数据以及从RDBMSRDBMS返回的数据进行返回的数据进行返回的数据进行返回的数据进行数据格式和类型转换。数据格式和类型转换。数据格式和类型转换。数据格式和类型
23、转换。(4 4)向应用程序返回处理结果。)向应用程序返回处理结果。)向应用程序返回处理结果。)向应用程序返回处理结果。(5 5)将执行过程中)将执行过程中)将执行过程中)将执行过程中RDBMSRDBMS返回的错误代返回的错误代返回的错误代返回的错误代码转换为码转换为码转换为码转换为ODBCODBC定义的标准错误代码,返回给定义的标准错误代码,返回给定义的标准错误代码,返回给定义的标准错误代码,返回给应用程序。应用程序。应用程序。应用程序。(6 6)根据需要说明和使用游标。)根据需要说明和使用游标。)根据需要说明和使用游标。)根据需要说明和使用游标。9.3.4ODBC9.3.4ODBC数据源管理
24、数据源管理数数数数 据据据据 源源源源 名名名名(Data Data Source Source NameName,简简简简 称称称称DSNDSN)是是是是应应应应用用用用程程程程序序序序与与与与数数数数据据据据库库库库系系系系统统统统连连连连接接接接的的的的桥桥桥桥梁梁梁梁,它它它它为为为为ODBCODBC驱驱驱驱动动动动程程程程序序序序管管管管理理理理器器器器指指指指出出出出数数数数据据据据库库库库服服服服务务务务器器器器名名名名称称称称,以以以以及及及及用用用用户户户户的的的的默默默默认认认认连连连连接接接接参参参参数数数数等等等等。注注注注意意意意,这这这这里里里里的的的的数数数数据据
25、据据源源源源并并并并不不不不是是是是指指指指某某某某一一一一个个个个数数数数据据据据库库库库,而而而而是是是是用用用用于于于于表表表表达达达达ODBCODBC驱驱驱驱动动动动程程程程序序序序和和和和一一一一个个个个RDBMSRDBMS特特特特殊殊殊殊连连连连接接接接的命名。的命名。的命名。的命名。9.4 ODBC驱动程序的分类驱动程序的分类 因因此此根根据据功功能能和和运运行行模模式式的的不不同同,驱驱动动程程序序可可以以分分为为多多种种级级别别,具具体体可可以以从从API一一致致性性级级别别、SQL语语法法一一致致性性级级别别和驱动程序类型三个方面来分类。和驱动程序类型三个方面来分类。9.4
26、.1API9.4.1API一致性级别一致性级别驱动程序的开发者一般不能实现所有的驱动程序的开发者一般不能实现所有的驱动程序的开发者一般不能实现所有的驱动程序的开发者一般不能实现所有的ODBCODBC函数。函数。函数。函数。APIAPI一致性级别决定了应用程序一致性级别决定了应用程序一致性级别决定了应用程序一致性级别决定了应用程序所能调用的函数的种类。所能调用的函数的种类。所能调用的函数的种类。所能调用的函数的种类。APIAPI一致性分为三个一致性分为三个一致性分为三个一致性分为三个级别:级别:级别:级别:核心级核心级核心级核心级APIAPI;扩展扩展扩展扩展1 1级级级级APIAPI;扩展扩展
27、扩展扩展2 2级级级级APIAPI。1 1核心级核心级核心级核心级APIAPI核核核核心心心心级级级级APIAPI包包包包括括括括最最最最基基基基本本本本的的的的功功功功能能能能,它它它它们们们们构构构构成成成成了了了了驱驱驱驱动动动动程程程程序序序序的的的的核核核核心心心心。核核核核心心心心级级级级APIAPI包包包包括括括括分分分分配配配配、释释释释放放放放环环环环境境境境句句句句柄柄柄柄、连连连连接接接接句句句句柄柄柄柄和和和和执执执执行行行行SQLSQL语语语语句句句句等等等等。核核核核心心心心级级级级的的的的驱驱驱驱动动动动程程程程序序序序还还还还能能能能完完完完成成成成其其其其他他
28、他他一一一一些些些些基基基基本本本本的的的的功功功功能能能能,如如如如向向向向语语语语句句句句中中中中传传传传入入入入参参参参数数数数、存存存存取取取取执执执执行行行行结结结结果果果果、目目目目录录录录操操操操作和错误跟踪等。作和错误跟踪等。作和错误跟踪等。作和错误跟踪等。2 2扩展扩展扩展扩展1 1级级级级APIAPI扩扩扩扩展展展展1 1级级级级APIAPI在在在在核核核核心心心心级级级级APIAPI的的的的基基基基础础础础上上上上增增增增加加加加了了了了部部部部分分分分函函函函数数数数,通通通通过过过过这这这这些些些些函函函函数数数数就就就就可可可可以以以以在在在在应应应应用用用用程程程
29、程序序序序中中中中动态地了解表的模式和可用的数据类型等。动态地了解表的模式和可用的数据类型等。动态地了解表的模式和可用的数据类型等。动态地了解表的模式和可用的数据类型等。大多数驱动程序支持扩展大多数驱动程序支持扩展大多数驱动程序支持扩展大多数驱动程序支持扩展1 1级级级级APIAPI。3 3扩展扩展扩展扩展2 2级级级级APIAPI扩扩扩扩展展展展2 2级级级级APIAPI在在在在扩扩扩扩展展展展1 1级级级级APIAPI的的的的基基基基础础础础上上上上又又又又增增增增加加加加了了了了部部部部分分分分函函函函数数数数,通通通通过过过过它它它它们们们们可可可可以以以以了了了了解解解解关关关关于于
30、于于主主主主码码码码和和和和外外外外码码码码的的的的信信信信息息息息,表表表表和和和和列列列列的的的的权权权权限限限限信信信信息息息息,以以以以及及及及数数数数据据据据库库库库存存存存储储储储过过过过程程程程的的的的信信信信息息息息等等等等。扩扩扩扩展展展展2 2级级级级APIAPI还还还还提提提提供供供供了了了了强强强强有有有有力力力力的的的的游游游游标标标标和和和和并并并并发发发发控控控控制制制制功功功功能能能能,这这这这是是是是它它它它受受受受欢欢欢欢迎迎迎迎的的的的最最最最主要的原因。主要的原因。主要的原因。主要的原因。9.4.2SQL9.4.2SQL语法一致性级别语法一致性级别SQL
31、语法一致性分为三个级别:语法一致性分为三个级别:最低限的最低限的SQL语法;语法;核心核心SQL语法;语法;扩展扩展SQL语法。语法。1最低限最低限SQL语法语法最低限最低限SQL语法可以满足大多数应用语法可以满足大多数应用程序对数据库的操作要求,包括程序对数据库的操作要求,包括CREATE和和DROP表,表,SELECT、INSERTE、UPDATE和和DELETE记录,记录,支持常用的数据类型和若干字符类型及支持常用的数据类型和若干字符类型及其变形,如其变形,如CHAR、VARCHAR和和LONGVARCHAR等。等。2 2核心核心核心核心SQLSQL语法语法语法语法核心核心核心核心SQL
32、SQL语法在最低限语法在最低限语法在最低限语法在最低限SQLSQL语法的基础上语法的基础上语法的基础上语法的基础上增加了很多必要的功能,包括增加了很多必要的功能,包括增加了很多必要的功能,包括增加了很多必要的功能,包括ALTERALTER表,表,表,表,CREATECREATE和和和和DROPDROP索引,索引,索引,索引,GRANTGRANT和和和和REVOKEREVOKE各种权限给不同的用户。此外,可以在各种权限给不同的用户。此外,可以在各种权限给不同的用户。此外,可以在各种权限给不同的用户。此外,可以在SQLSQL语语语语法中嵌套子查询,还增加了一些数据类型,如法中嵌套子查询,还增加了一
33、些数据类型,如法中嵌套子查询,还增加了一些数据类型,如法中嵌套子查询,还增加了一些数据类型,如短整数和长整数、单精度浮点数和双精度浮点短整数和长整数、单精度浮点数和双精度浮点短整数和长整数、单精度浮点数和双精度浮点短整数和长整数、单精度浮点数和双精度浮点数等。数等。数等。数等。3扩展扩展SQL语法语法 扩展扩展SQL语法引进了更复杂的语法,语法引进了更复杂的语法,如游标控制语句。增加了日期、时间、如游标控制语句。增加了日期、时间、二进制数据类型和时间戳二进制数据类型和时间戳(TIMESTAMP)等其他复杂数据类型。)等其他复杂数据类型。9.4.39.4.3驱动程序类型驱动程序类型ODBCODB
34、C驱驱驱驱动动动动程程程程序序序序可可可可以以以以分分分分为为为为单单单单层层层层驱驱驱驱动动动动程程程程序序序序(SINGLETIER SINGLETIER DRIVERDRIVER)和和和和多多多多层层层层驱驱驱驱动动动动程程程程序(序(序(序(MULTITIER DRIVERMULTITIER DRIVER)。)。)。)。单单单单层层层层驱驱驱驱动动动动程程程程序序序序既既既既具具具具有有有有ODBCODBC功功功功能能能能也也也也处处处处理理理理SQLSQL语句,它实际上就是一个语句,它实际上就是一个语句,它实际上就是一个语句,它实际上就是一个DBMSDBMS。多多多多层层层层驱驱驱驱
35、动动动动程程程程序序序序中中中中ODBCODBC功功功功能能能能与与与与DBMSDBMS功功功功能能能能相相相相分分分分离离离离,驱驱驱驱动动动动程程程程序序序序负负负负责责责责处处处处理理理理ODBCODBC应应应应用用用用程程程程序序序序中中中中的的的的函函函函数数数数调调调调用用用用,而而而而处处处处理理理理SQLSQL语语语语句句句句的的的的任任任任务务务务由由由由DBMSDBMS完成。完成。完成。完成。单层驱动程序的系统结构如图单层驱动程序的系统结构如图单层驱动程序的系统结构如图单层驱动程序的系统结构如图9.39.3所示。所示。所示。所示。单层驱动程序不仅要处理单层驱动程序不仅要处理
36、单层驱动程序不仅要处理单层驱动程序不仅要处理ODBCODBC函数调用,函数调用,函数调用,函数调用,还要解释执行还要解释执行还要解释执行还要解释执行SQLSQL语句,即执行语句,即执行语句,即执行语句,即执行RDBMSRDBMS的功的功的功的功能。能。能。能。多多多多层层层层驱驱驱驱动动动动程程程程序序序序只只只只处处处处理理理理应应应应用用用用程程程程序序序序的的的的ODBCODBC函函函函数数数数调调调调用用用用和和和和数数数数据据据据转转转转换换换换。SQLSQL语语语语句句句句则则则则由由由由驱驱驱驱动动动动程程程程序序序序传传传传递递递递给给给给相相相相应应应应的的的的数数数数据据据
37、据库库库库引引引引擎擎擎擎,由由由由数数数数据据据据库库库库引引引引擎擎擎擎解解解解释释释释执执执执行行行行SQLSQL语句,实现用户的各种操作请求。语句,实现用户的各种操作请求。语句,实现用户的各种操作请求。语句,实现用户的各种操作请求。9.5 ODBC的工作流程的工作流程本本本本节节节节讲讲讲讲解解解解使使使使用用用用ODBCODBC的的的的应应应应用用用用系系系系统统统统大大大大致致致致的的的的工工工工作作作作流流流流程程程程,使使使使读读读读者者者者对对对对一一一一个个个个ODBCODBC会会会会话话话话过过过过程程程程中中中中,应应应应用用用用程程程程序序序序如如如如何何何何通通通通
38、过过过过ODBCODBC进进进进行行行行通通通通信信信信,执执执执行行行行对对对对数数数数据据据据库的操作有一个概要了解。库的操作有一个概要了解。库的操作有一个概要了解。库的操作有一个概要了解。1 1建立建立建立建立ODBCODBC环境环境环境环境2 2建立建立建立建立ODBCODBC连接连接连接连接3 3建立语句句柄建立语句句柄建立语句句柄建立语句句柄4 4执行执行执行执行SQLSQL语句语句语句语句5 5终止终止终止终止例如:例如:SQLHENV henv1;SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv1);2 2释放释放释放释放O
39、DBCODBC环境环境环境环境在结束应用系统之前,必须释放为该应用在结束应用系统之前,必须释放为该应用在结束应用系统之前,必须释放为该应用在结束应用系统之前,必须释放为该应用系统保留的所有资源。完成这一过程的系统保留的所有资源。完成这一过程的系统保留的所有资源。完成这一过程的系统保留的所有资源。完成这一过程的ODBCODBC函数是:函数是:函数是:函数是:SQLRETURN SQLFreeHandle(SQLRETURN SQLFreeHandle(SQLSMALLINT SQLSMALLINT HandleTypeHandleType,SQLHANDLE SQLHANDLE HandleHa
40、ndle);例如:例如:例如:例如:SQLAllocHandle(SQL_HANDLE_ENVSQLAllocHandle(SQL_HANDLE_ENV,henv1)henv1);9.5.29.5.2建立和释放建立和释放ODBCODBC连接连接1 1建立建立建立建立ODBCODBC连接连接连接连接应用系统对每一个要连接的数据源都必须应用系统对每一个要连接的数据源都必须应用系统对每一个要连接的数据源都必须应用系统对每一个要连接的数据源都必须建立一个建立一个建立一个建立一个ODBCODBC连接,分配一个连接句柄连接,分配一个连接句柄连接,分配一个连接句柄连接,分配一个连接句柄(Connection
41、 HandleConnection Handle)。)。)。)。SQLRETURN SQLAllocHandle(SQLRETURN SQLAllocHandle(SQLSMALLINT SQLSMALLINT HandleTypeHandleType,SQLHANDLE SQLHANDLE InputHandleInputHandle,SQLHANDLE*SQLHANDLE*OutputHandlePtrOutputHandlePtr);其其其其中中中中,参参参参数数数数InputHandleInputHandle是是是是应应应应用用用用系系系系统统统统的的的的环环环环境句柄指针。境句柄指针
42、。境句柄指针。境句柄指针。例如:例如:例如:例如:SQLHDBC hdbc1SQLHDBC hdbc1;SQLAllocHandle(SQL_HANDLE_DBCSQLAllocHandle(SQL_HANDLE_DBC,henv1henv1,&hdbc1)&hdbc1);2 2释放释放释放释放ODBCODBC连接连接连接连接当当当当一一一一个个个个应应应应用用用用系系系系统统统统不不不不再再再再需需需需要要要要一一一一个个个个连连连连接接接接句句句句柄柄柄柄时时时时,应应应应该该该该释释释释放放放放该该该该句句句句柄柄柄柄所所所所分分分分配配配配的的的的所所所所有有有有资资资资源源源源。实实
43、实实现现现现这这这这一一一一功能的函数是:功能的函数是:功能的函数是:功能的函数是:SQLRETURN SQLFreeHandle(SQLRETURN SQLFreeHandle(SQLSMALLINT SQLSMALLINT HandleTypeHandleType,SQLHANDLE SQLHANDLE HandleHandle);其中,参数其中,参数其中,参数其中,参数HandleHandle是连接句柄。是连接句柄。是连接句柄。是连接句柄。例如:例如:例如:例如:SQLAllocHandle(SQL_HANDLE_DBCSQLAllocHandle(SQL_HANDLE_DBC,hdbc
44、1)hdbc1);9.5.39.5.3连接和断开数据源连接和断开数据源1 1连接数据源连接数据源连接数据源连接数据源分配了环境句柄和连接句柄之后,就可以分配了环境句柄和连接句柄之后,就可以分配了环境句柄和连接句柄之后,就可以分配了环境句柄和连接句柄之后,就可以连接连接连接连接ODBCODBC的数据源了。连接数据源的函数有的数据源了。连接数据源的函数有的数据源了。连接数据源的函数有的数据源了。连接数据源的函数有多种,但最有效的、最通用的是多种,但最有效的、最通用的是多种,但最有效的、最通用的是多种,但最有效的、最通用的是SQLConnectSQLConnect函数。函数。函数。函数。SQLCon
45、nectSQLConnect函数将加载一个函数将加载一个函数将加载一个函数将加载一个RDBMSRDBMS的的的的驱动程序,并建立与该数据库的连接。驱动程序,并建立与该数据库的连接。驱动程序,并建立与该数据库的连接。驱动程序,并建立与该数据库的连接。SQLConnectSQLConnect函数的格式是:函数的格式是:函数的格式是:函数的格式是:SQLRETURN SQLConnect(SQLRETURN SQLConnect(SQLHDBC SQLHDBC ConnectionHandleConnectionHandle,SQLCHAR*SQLCHAR*ServerNameServerName,
46、SQLSMALLINT SQLSMALLINT NameLength1NameLength1,SQLCHAR*SQLCHAR*UserNameUserName,SQLSMALLINT SQLSMALLINT NameLength2NameLength2,SQLCHAR*SQLCHAR*AuthenticationAuthentication,SQLSMALLINT SQLSMALLINT NameLength3NameLength3);其中,参数其中,参数ConnectionHandle 是一是一个已经分配的连接句柄;个已经分配的连接句柄;ServerName是是一个字符串,表示应用系统所要连
47、接的一个字符串,表示应用系统所要连接的数据源名称;数据源名称;NameLength1是数据源字是数据源字符串的长度。符串的长度。例如:例如:SQLConnect(hdbc1,sademo,SQL_NTS,dba,SQL_NTS,sql,SQL_NTS);该该例例以以用用户户名名“dba”和和口口令令“sql”连接数据源连接数据源“sademo”。2 2断开数据源断开数据源断开数据源断开数据源当有关的数据库存取任务完成之后,应该当有关的数据库存取任务完成之后,应该当有关的数据库存取任务完成之后,应该当有关的数据库存取任务完成之后,应该断开与数据源的连接,关闭与指定连接句柄相断开与数据源的连接,关
48、闭与指定连接句柄相断开与数据源的连接,关闭与指定连接句柄相断开与数据源的连接,关闭与指定连接句柄相关的数据源。这个操作可由关的数据源。这个操作可由关的数据源。这个操作可由关的数据源。这个操作可由SQLDisconnectSQLDisconnect函函函函数完成。数完成。数完成。数完成。SQLRETURN SQLDisconnect(SQLRETURN SQLDisconnect(SQLHDBC SQLHDBC ConnectionHandleConnectionHandle);其中,参数其中,参数ConnectionHandle是要断是要断开的连接句柄。开的连接句柄。函数的返回值略。函数的返回
49、值略。例如:例如:SQLDisconnect(hdbc1);9.5.49.5.4分配和释放语句句柄分配和释放语句句柄1 1分配语句句柄分配语句句柄分配语句句柄分配语句句柄SQLSQL的执行函数用于处理和传递的执行函数用于处理和传递的执行函数用于处理和传递的执行函数用于处理和传递SQLSQL语句,语句,语句,语句,这类函数都要求一个有效的语句句柄作为参数,这类函数都要求一个有效的语句句柄作为参数,这类函数都要求一个有效的语句句柄作为参数,这类函数都要求一个有效的语句句柄作为参数,就像创建就像创建就像创建就像创建ODBCODBC环境和连接一样要分配一个环环境和连接一样要分配一个环环境和连接一样要分
50、配一个环环境和连接一样要分配一个环境句柄和连接句柄。境句柄和连接句柄。境句柄和连接句柄。境句柄和连接句柄。SQLAllocHandleSQLAllocHandle函数可以为语句句柄分配内函数可以为语句句柄分配内函数可以为语句句柄分配内函数可以为语句句柄分配内存存储区,并将此句柄与指定的连接句柄建立关存存储区,并将此句柄与指定的连接句柄建立关存存储区,并将此句柄与指定的连接句柄建立关存存储区,并将此句柄与指定的连接句柄建立关联。联。联。联。SQLAllocHandleSQLAllocHandle函数的格式是:函数的格式是:函数的格式是:函数的格式是:SQLRETURN SQLAllocHandl