技术文章 > 通用ODBC API应用结构概述

通用ODBC API应用结构概述

2017-12-12 04:32

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
无论在Visual C++或Visual Basic中,我们开发数据库应用程序,都可以通过使用ODBC API直接调用SQL命令来处理数据库的数据(当然,在此之前必须通过“控制面板”中的“ODBC数据源”,建立与数据库的连接)。
ODBC API是由一组函数调用组成的,其核心是SQL。ODBC函数的主要功能就是将SQL语句发送到目标数据库中,然后处理这些SQL语句返回的结果。使用ODBC的基本步骤是:
(1)为ODBC分配环境句柄;
(2)分配一个连接句柄;
(3)连接到数据库;
(4)用SQL命令分配一个语句句柄;
(5)传送该命令;
(6)关闭连接;
(7)解除连接和环境句柄。
为了更清楚地阐述ODBC API的调用步骤,以及涉及到的重要函数,我们总结了一个表(表1)来说明ODBC API应用的结构,并给出了必要的注释,希望对大家有所帮助。


所有ODBC应用程序都必须遵循如表1所示的通用ODBC API调用。
如表1所示,在ODBC应用程序中必须做的第一件事情是调用SQLAllocHandle函数来创建一个环境句柄。ODBC Driver Manager使用该环境句柄跟踪每一个ODBC连接和其状态。接下来,ODBC应用程序必须调用SQLSetEnvAttr函数。这个函数注册将要使用的ODBC API版本。如果没有调用这个函数,那么ODBC驱动程序假设应用程序使用ODBC 2.0调用约定。如果使用设置为SQL_OV_ODBC 3(其值为3)的SQL_ATTR_ODBC_VERSION环境属性,通过调用SQLSetEnrAttr函数,ODBC驱动程序知道该应用程序将使用ODBC 3.x调用约定。当设置这些环境选项之后,所有ODBC应用程序必须调用SQLAllocHandle函数创建一个数据库连接句柄。当分配数据库连接句柄时,SQLAllocHandle函数关联这个新数据库连接句柄来确认在数据库连接中使用的驱动程序。接下来,使用由以前的SQLAllocHandle函数返回的数据库句柄,使用SQLConnect函数启动一个对数据库的ODBC连接。该SQLConnect函数必须提供连接到目标数据库的数据所需源名称和登录信息。SQLDriverConnect函数或者SQLBrowseCcnnect函数都可以替代SQLConnect函数。SQLDriverConnect函数提示终端用户输入必要的数据源连接信息,SQLBrowseConnect函数向应用程序返回一个字符串,它确认丢失的连接信息。当应用程序没有提供所有必要的数据源登录信息时,一般使用SQLDriverConnect函数。而SQLBrowseConnect函数通常用来创建定制的登录对话框。最后一段ODBC初始化代码是调用SQLAllocHandle函数,创建一个语句句柄。该语句句柄用于处理SQL请求。当这个语句分配之后,ODBC Driver Manager使用该语句句柄管理ODBC连接的状态信息。例如,在执行Select操作之前,应用程序不能提取数据。语句句柄允许ODBC Driver Manager了解ODBC语句的当前状态,因此也知道可以在给定时间执行的有效操作。当分配该语句句柄之后,ODBC应用程序可以开始使用该语句句柄处理SQL请求。这是ODBC应用程序所做的实际工作。一个典型的ODBC应用程序使用这种语句句柄处理许多SQL请求,然后检索和处理这些请求的结果。使用SQLExecute或者SQLExecDirect函数将发送SQL语句到连接的数据库中。使用SQLExecute函数执行准备的SQL或者静态的SQL语句,SQLExecDirect函数用于ad hoc或动态的SQL语句。在SQLExecute函数可以使用之前,必须使用SQLPrepare函数。SQLExecute一般用于重复执行的SQL语句。SQLExecDirect函数通常用于只执行一次的SQL语句。SQLExecute和SQLExecDirect函数可以处理任何在主机数据库上有效的SQL语句。如果这个SQL请求是一个Select操作,它通常创建一个结果集,该结果集包含了满足SQL查询的信息。使用SQLFetch函数访问这个结果集。
当ODBC应用程序准备终止时,它还必须执行一些清理步骤,释放各种ODBC句柄占用的内存,然后关闭已启动的会话。对于每一个初始化语句,还有一个相应的清理语句。例如,当ODBC应用程序终止时,对于每一个打开的语句句柄,必须首先执行SQLFreeHandle函数。然后,对于每一个打开的连接,必须调用SQLDisconnect函数。接下来,它必须调用SQLFreeHandle函数释放由每一个数据库连接句柄占用的内存。最后,ODBC应用程序必须调用SQLFreeHandle函数释放ODBC环境占用的内存。刚开始,这些似乎非常复杂,但是对于所有的ODBC应用程序,这些ODBC初始化和清理函数都是非常类似的。一旦定义了这些函数,就可以把它们剪贴到其他ODBC应用程序中。