1.句柄分配函数
SQLRETURN SQLAllocHandle(
SQLSMALLINT HandleType,
SQLHANDLE InputHandle,
SQLHANDLE * OutputHandlePtr);
-------------------------------------------------------------
HandleType
句柄类型。只有四种,SQL_HANDLE_ENV(环境句柄) SQL_HANDLE_DBC(连接句柄) SQL_HANDLE_DESC(描述句柄) SQL_HANDLE_STMT(语句句柄) 。环境句柄是建立ODBC环境需要的,搭建了这个环境才能做其他数据库相关的事情。连接句柄就是用来连接数据库的,描述句柄用来描述连接的各种信息,语句句柄用来执行语句。
InputHandle
输入句柄。新分配的句柄将要基于此句柄而创建,如果是分配环境句柄则此句柄为SQL_NULL_HDBC,即空句柄。如果分配连接句柄,则为环境句柄变量,如果分配语句句柄,则为连接句柄变量。
OutputHandlePtr
输出句柄。此参数是一个句柄指针,用来存放新分配的句柄。用取址符来传递。
返回值
可能取值有:SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, or SQL_ERROR.前两个都表示成功,第二个虽然成功,但带有警告信息。第三个为句柄不可用,第四个为错误。后两个都表示出错。
例如:SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
2.设置属性
SQLRETURN SQLSetEnvAttr(
SQLHENV EnvironmentHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER StringLength);
-------------------------------------------------------------
EnvironmentHandle
环境句柄
Attribute
属性类型
ValuePtr
属性取值,指针类型,最好强制转换成void*类型
StringLength
属性值长度,通常为0
例如:SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
3.连接数据库
SQLRETURN SQLDriverConnect(
SQLHDBC ConnectionHandle,
SQLHWND WindowHandle,
SQLCHAR * InConnectionString,
SQLSMALLINT StringLength1,
SQLCHAR * OutConnectionString,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLength2Ptr,
SQLUSMALLINT DriverCompletion);
----------------------------------------------------------
ConnectionHandle
连接句柄
WindowHandle
窗口句柄,可以设置为NULL不指定窗口
InConnectionString
连接字符串,包含驱动、服务器、数据库、用户名、密码、(连接可信度,可要可不要)
StringLength1
连接字符串长度,一般写成SQL_NTS(宏)
OutConnectionString
连接成功后返回的完整的连接字符串
BufferLength
返回的连接字符串缓存的字符大小
StringLength2Ptr
连接成功后返回的完整的连接字符串的字符总数。如果大于或等于缓存长度,将会截断到 缓存大小减去空字符所占大小 的大小的长度的字符串。
DriverCompletion
一个指示标志,指示是否驱动管理器或驱动一定提示更多的连接信息。
可能的取值:(一般选择SQL_DRIVER_COMPLETE)
SQL_DRIVER_NOPROMPT 应用程序调用驱动管理器复制指定的连接字符串。
SQL_DRIVER_COMPLETE 和 SQL_DRIVER_COMPLETE_REQUIRED 如果应用程序指定的连接诶字符串包含DSN关键字,应用程序将调用驱动管理器复制连接字符串
SQL_DRIVER_PROMPT 如果连接字符串不包含驱动、数据源名字、文件数据源名关键字,驱动管理器将显示数据源对话框。
例如:SQLDriverConnect(hdbc, NULL,(SQLCHAR*) "Driver=SQL Server;Server=127.0.0.1;Trusted_Connection=no;Database=test;Uid=sa;Pwd=wdx19900810;", SQL_NTS, szOutConn,sizeof(szOutConn), (short*)&cbOutConn, SQL_DRIVER_COMPLETE);
3.执行SQL语句
SQLRETURN SQLExecDirect(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength);
-----------------------------------------------------------------
StatementHandle
语句句柄
StatementText
SQL语句字符串
TextLength
字符串长度,一般是SQL_NTS
例如:SQLExecDirect(hstmt,(SQLTCHAR*)"select * from student",SQL_NTS);
4.列绑定
SQLRETURN SQLBindCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLSMALLINT TargetType,
SQLPOINTER TargetValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_Ind);
-----------------------------------------------------------------
StatementHandle
语句句柄
ColumnNumber
绑定的列的序号,从1开始
TargetType
绑定的列的数据类型
TargetValuePtr
绑定的对应的程序的变量的地址
BufferLength
变量占内存的大小
StrLen_or_Ind
从数据库返回的数据量的大小
例如:SQLBindCol( hstmt,1,SQL_C_CHAR,szFilename,sizeof(szFilename),(long*)&rtsize);
-----------------------------------------------------------------
5.获取数据
SQLRETURN SQLFetch(
SQLHSTMT StatementHandle);
------------------------------------------------------------------
StatementHandle
语句句柄
例如:SQLFetch(hstmt);
6.释放句柄
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
------------------------------------------------------------------
HandleType
句柄类型
Handle
句柄变量
例如:SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
7.断开连接
SQLRETURN SQLDisconnect(
SQLHDBC ConnectionHandle);
------------------------------------------------------------------
ConnectionHandle
连接句柄
例如:SQLDisconnect(hdbc);