本节的例子用来说明如何调用ODBC数据库连接函数实现与数据源的连接,怎么执行SQL语句、释放数据库连接资源,以及在执行过程中出现错误如何处理等。 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); } |