ZLW-NOTE:Basic ODBC Application Steps

此部分内容如描述ODBC应用的一般流程。并非所有应用程序都严格按照这里列的函数的顺序调用,但大部分应用程序都使用这些步骤的变体。基本应用步骤如下面流程图所描述

本部份包含下面主题:

步骤1:连接到数据源

在任何应用程序中第一步都是连接到数据源。这个阶段的操作,包括用到的函数等如下图所示:

这个阶段用到的函数如下:

//STEP1: CONNECT
SQLAllocHandle(ENV)
SQLSetEnvAttr
SQLAllocHandle(DBC)
SQLConnect
SQLSetConnectAttr

连接到数据源的第一步是加载驱动管理器和通过SQLAllocHandle分配环境变量句柄。更多信息参阅Allocating the Environment Handle。
然后应用程序通过调用SQLSetEnvAttr设置SQL_ATTR_APP_ODBC_VER环境属性来注册其所遵循的ODBC版本。更多信息参阅Declaring the Appliation's ODBC Version和Backward Compatibility and Standards Compliance。
下一步应用程序通过SQLAllocHandle分配一个连接句柄,然后通过SQLConnect,SQLDriverConnect,或者SQLBrowseConnect连接到数据源。更多信息参阅Allocating a Connection Handle和Establishing a Connection。
接下来应用设置任何连接属性,诸如是否手动提交等。更多信息参阅Connection Attributes。

步骤2:初始化应用

如下图所描述,第二步是初始化应用。不同的应用在这一步具体执行的内容会有差别。

此时,应用通常使用SQLGetInfo 来发现驱动程序的功能。 更多信息参阅Considering Database Features to Use。
所有应用都需要通过SQLAllocHandle分配一个语句句柄,许多应用还会通过SQLSetStmtAttr设置语句属性,比如游标类型等。更多信息参阅Allocating a Statement Handle和Statement Attributes。

步骤3:建立和执行SQL语句

如下图所示,第三步是建立并执行一个SQL语句。在这一阶段使用的方法可能会有很大差异。应用程序可能需要提示用户输入一个SQL语句,基于用户的输入创建SQL语句,或者使用硬编码到代码中的SQL语句。更多信息参阅Constructing SQL Statements。

如果SQL语句中包含参数,应用程序调用SQLBindParameter将参数绑定到应用变量上。更多信息参阅Statement Parameters。
在创建了SQL语句并且所有参数都进行了绑定后,可以通过SQLExecDirect执行语句。如果这个语句会执行很多次,可以使用SQLPrepare进行prepare,然后通过SQLExecute进行执行。更多信息参照Executing a Satement。
应用程序也可能完全放弃执行SQL语句,而是调用一个函数来返回一个包含catalog信息的结果集,比如可用的列或表。 更多信息参阅Uses of Catalog Data。
应用程序的下一个操作取决于执行的SQL语句的类型。‘

语句类型 后续步骤
SELECT 或catalog函数 步骤4a: 获取结果集
UPDATE,DELETE,INSERT 步骤4b: 获取行数
所有其他SQL语句 步骤3: 创建和执行SQL语句或步骤5: 提交事务

步骤4a:获取结果集

如下图所示,这一步进行获取结果集。

如果在步骤3中执行的是SELECT语句或catalog函数,应用程序首先调用SQLNumResultCols来确定结果集中列的数量。如果应用程序本身知道结果集中的列的数量,比如SQL语句硬编码到应用程序中,则这一步不是必须的。
接下来应用程序通过SQLDescribeCol获取结果集中每一列的列名、类型、精度、规模等信息。同样的,对于已知这些信息的应用程序来说这一步也是不必要的。
接下来应用程序调用SQLFetch获取第一行数据并将这一行中的数据放到被SQLBindCol绑定到该列的变量中。如果这一行数据中有长数据,则需要调用SQLGetData来获取长数据。应用程序持续调用SQLFetch和SQLGetData获取更多数据。等应用程序结束获取数据后,调用SQLCloseCursor关闭游标。
关于获取数据的完整描述,参阅Retrieving Results(Basic) 和Retrieving Results(Advalced)。
到目前为止,应用程序后面可能是返回到步骤3:创建和执行SQL语句,执行同一个事务中的下一个语句;或者是执行步骤5:提交事务,执行提交或回滚。

步骤4b:获取行数

如下图所示,该步骤中获取行数。

如果步骤3中执行的语句是UPDATE,DELETE,INSERT中的一种,应用程序可以通过SQLRowCount获取语句影响到的行数。更多信息参阅Determining the Number of Affected Rows。
应用下一步要么回到步骤3继续执行同一个事务中的下一个语句,要么执行步骤5,提交或回滚事务。

步骤5:提交事务

如下所示,该步骤执行事务的终结,提交或回滚。

调用SQLEndTran提交或回滚事务。应用程序只有在设置了事务提交模式为手动提交时执行该步骤。如果事务提交模式为自动提交,语句执行结束则事务会自动提交。默认是自动提交。更多信息参阅Transactions。
结束事务后,如果应用要在一个新事务中执行语句,返回步骤3。如果要断开与数据源的连接,执行步骤6。

步骤6:断开到数据源的连接

如下所示,最后的步骤是与数据库断开连接。

应用首先调用SQLFreeHandle释放所有语句句柄。更多信息参阅Freeing a Statement Handle。
接下来应用调用SQLDisconnect断开到数据源的连接,并通过SQLFreeHandle释放连接句柄。更多信息参阅Disconnecting from a Data Source or Driver。
最后应用通过SQLFreeHandle释放环境句柄,卸载驱动器管理器。更多信息参阅Allocating the Environment Handle。

posted @ 2022-05-12 23:43  Winnie^^  阅读(46)  评论(0)    收藏  举报