本节的例子用来说明如何调用ODBC数据库连接函数实现与数据源的连接,怎么执行SQL语句、释放数据库连接资源,以及在执行过程中出现错误如何处理等。
 程序清单6.1
  #include <stdio.h>
  #include <string.h>
  #include <windows.h>
  #include <sql.h> //ODBC 驱动程序基本头文件
  #include <sqlext.h> //ODBC 驱动程序扩展头文件
  #include <sqltypes.h> //ODBC 数据类型头文件
  SQLHENV henv = SQL_NULL_HENV; //环境句柄
  SQLHDBC hdbc1 = SQL_NULL_HDBC; //数据库句柄
  SQLHSTMT hstmt1 = SQL_NULL_HSTMT; //语句句柄

  int main() {
   RETCODE retcode; //SQL语句执行返回信息码
  //数据源定义
   UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "MyDSN",
   szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = "MyPassword";
  // 申请ODBC环境句柄
   retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
  // 让ODBC驱动程序管理器知道这是一个ODBC3.0应用程序
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
     (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
  // 申请ODBC连接句柄并与数据库连接
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
    retcode = SQLConnect(hdbc1, szDSN, (SWORD)strlen(szDSN),
    szUID, (SWORD)strlen(szUID),
    szAuthStr, (SWORD)strlen(szAuthStr));
    if ( (retcode != SQL_SUCCESS) &&
    (retcode != SQL_SUCCESS_WITH_INFO) ) {
  //如果连接不成功或有信息返回,调用SQLGetDiagRec处理错误信息.
  //释放相应句柄,返回。
    }
  // 申请语句句柄
    retcode =SQLAllocStmt(hdbc1,& hstmt1)
    if ( (retcode != SQL_SUCCESS) &&
    (retcode != SQL_SUCCESS_WITH_INFO) ) {
  //如果连接不成功或有信息返回,调用SQLGetDiagRec处理错误信息.
  //释放相应句柄,返回。
           }
  // 处理SQL语句
    retcode=SQLExecDirect(hstmt1,'SELECT * FROM authors', SQL_NTS);
  //释放数据库连接资源
   SQLDisconnect(hdbc1); //断开与数据库的连接
   SQLFreeStmt(hstm1, SQL_CLOSE); //释放语句句柄
   SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); //释放数据库句柄
   SQLFreeHandle(SQL_HANDLE_ENV, henv); //释放环境句柄
    return(0);
         }