注:本文内容主要摘自《数据库教程》电子工业出版社,施伯乐等编著。sinble总结
句柄是应用程序和数据源连接的工具。根据应用程序的请求,驱动程序管理器就各驱动程序为存储有关ODBC环境、每个连接和每个SQL语句的信息分配一块存储空间,而把代表这些存储空间的句柄返回给应用程序,应用程序在调用ODBC函数时就要用到这些句柄。
ODBC使用三个句柄:环境句柄,连接句柄,语句句柄。
其中,一个环境句柄可与多个连接句柄相连,一个连接句柄可与多个语句句柄相连。(我的话:利用已经分配好的环境句柄可以创建与其相连的连接句柄,利用已经分配好的连接句柄可以创建与其相连的语句句柄。)
环境句柄定义一个数据库环境,连接句柄定义一个数据库连接,语句句柄定义一条SQL语句。
对于句柄,有两个ODBC函数:分配函数和释放函数。
执行分配函数的时候,首先分配内存,然后定义所需的数据结构,并对制定数据结构的句柄赋值。分配了句柄后,应用系统就可以将句柄传递给使用的接口函数,指出该函数所作用的环境、连接或句柄。
执行释放函数时,将释放各种句柄和每一个句柄所分配的内存。
环境句柄:HENV类型(助记:handle environment)
分配函数:SQLAllocEnv(phenv);//返回SQL_SUCCESS表示成功,SQL_ERROR表示失败;下同
释放函数:SQLFreeEnv(henv);
连接句柄:HDBC类型(助记:handle database connection)
分配函数:SQLAllocConnect(henv, phdbc);//用已经分配好的环境句柄,分配连接句柄
释放函数:SQLFreeConnect(hdbc);
语句句柄:HSTMT类型(助记:handle ???)
分配函数:SQLAllocStmt(hdbc, phstmt);//用已经分配好的连接句柄,分配语句句柄
释放函数:SQLFreeStmt(hstmt, fOption);
//fOption有四个取值,用来指定释放这个句柄的哪些资源
SQL_CLOSE:用于撤销所有未完成的操作结果,并关闭任何与句柄有关的光标。
SQL_DROP:用于释放所有与该句柄相关的资源,如果执行成功,则该句柄不再有效。
SQL_UNBIND:用于释放所有联编的列。
SQL_RESET_PARAMS:用于释放所有联编的参数。
上述三种句柄的分配函数和释放函数,在sql.h头文件中声明。需要用到时,必须include该头文件。
ODBC应用程序的基本流程分三个部分:初始化——>SQL处理——>终止。
其中初始化的顺序:
1.分配环境句柄:SQLAllocEnv函数
2.分配连接句柄:SQLAllocConnect函数
3.与服务器连接:SQLConnect函数
4.分配语句句柄:SQLAllocStmt函数
SQL处理中涉及的函数有:
1.SQLExecDirect函数:直接执行函数
2.SQLPrepare函数:语句预备函数
3.SQLExecute函数:语句执行函数
终止的顺序是:
1.与服务器断开:SQLDisconnect函数
2.释放语句句柄:SQLFreeStmt函数
3.释放连接句柄:SQLFreeConnect函数
4.释放环境句柄:SQLFreeEnv函数
其中,连接数据库函数SQLConnect说明如下:
SQLConnect(hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr);
hdbc是一个已经分配的连接分配;
szDSN和cbDSN是系统要连接的数据源名称及其长度;
szUID和cbUID表示用户标识符及其长度;
szAuthStr和cbAuthStr是权限字符串及其长度
函数:SQLDisconnect(hdbc);
SQL语句执行相关函数说明:
直接执行函数:SQLExecuDirect(hstmt, szSqlStr, cbSqlStr);
hstmt是一个有效的语句句柄
szSqlStr和cbSqlStr表示要执行的SQL语句及其长度
有准备执行SQL语句函数:先执行SQLPrepare函数为一连串的SQL语句做好准备,然后调用SQLExecute函数执行。
SQLPrepare(hstmt, szSqlStr, cbSqlStr);//参数意义与SQLExecuDirect相同
SQLExecute(hstmt);//参数意义与SQLExecuDirect同名参数相同
查询返回的是一个行集合,由光标控制。
查询结果获取:SQLFetch移动光标,SQLGetData读取光标指向行中的一列值。
SQLFetch(hstmt);//把光标移到下一行
SQLGetData(hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue);
hstmt为有效的语句句柄
icol和fCType分别是结果数据的列号和类型
rgbValue和cbValueMax分别是数据存储区的指针和最大长度
pcbValue是本次调用前rgbValue中可以返回的字节总数
ODBC连接数据库总结
原文:http://blog.csdn.net/ghevinn/article/details/43736253