码迷,mamicode.com
首页 > 数据库 > 详细

ODBC连接数据库总结

时间:2015-02-11 18:36:57      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

注:本文内容主要摘自《数据库教程》电子工业出版社,施伯乐等编著。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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!