ODBC-C语言连接数据库(SQL Server 2000)(下)

时间:2022-06-02 19:41:55

1.SQLAllocHandle创建odbc句柄

SQLRETURN  SQLAllocHandle(

                           SQLSMALLINT  HandleType,//HandleType的取值可以为SQL_HANDLE_ENV(申请环境句柄)、SQL_HANDLE_DBC(申请数据库连接句柄)、                                                                                                                        SQL_HANDLE_STMT(申请SQL语句句柄)

                           SQLHANDLE  InputHandle,//输入句柄

                           SQLHANDLE*  OutputHandlePtr//输出句柄,即第一个参数指定的需要申请的句柄

);

创建环境句柄后务必调用:SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER)//将odbc设置成为版本3,否则某些odbc api函数不能被支持。

2.ODBC API 函数的返回值

返回值定义:SQLRETURN 

成功是返回值:SQL_SUCCESS、SQL_SUCCESS_WITH_INFO(表明执行成功但带有一定错误信息)

失败时返回值:SQL_ERROR

3.SQLConnect连接数据库

SQLRETURN SQLConnect(

                          SQLHDBC  hdbc,//数据库连接句柄

                          SQLCHAR*  ServerName,//为ODBC的DSN名

                          SQLSMALLINT  length_ServerName,//ServerName数据的长度

                          SQLCHAR*  UserName,//数据库用户名

                          SQLSMALLINT  length_UserName,//UserName数据的长度

                          SQLCHAR*  PassWord,//数据库用户密码

                          SQLSMALLINT  length_PassWord//PassWord数据的长度

);

关于以上三个参数的长度可以直接指定,也可以定为SQL_NTS表明参数是以NULL字符结尾

附:示例代码

#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>

int main(){

SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt

ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//设置环境属性
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"phonesql",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"112358",SQL_NTS);//连接数据库
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
printf("success!\n");
else printf("error!\n");


return 0;
}