- 论坛徽章:
- 0
|
程序代码
- // TimeoutTest.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include "windows.h"
- //ODBC API
- #include <sql.h>
- #include <sqlext.h>
- #include <odbcinst.h>
- #pragma comment(lib,"odbc32.lib")
- #pragma comment(lib,"OdbcCP32.Lib")
- int main(int argc, char* argv[])
- {
- SQLHENV hEnv; // Handle ODBC environment
- SQLRETURN nRet; // result of functions
- SQLHDBC hDBC; // Handle connection
- SQLHSTMT hStmt; // Handle Statement
- SQLUINTEGER nTimeout = 3; // Timeout
- SQLCHAR nVersion = 0;
- SQLCHAR pszSqlState[SQL_MAX_MESSAGE_LENGTH] = "";
- SQLCHAR pszErrorMsg[SQL_MAX_MESSAGE_LENGTH] = "";
- SQLINTEGER nNativeError = 0L;
- SQLSMALLINT nErrorMsg = 0;
-
- // 1. allocate Environment handle and register version
- nRet = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error AllocHandlen");
- return 0;
- }
- nRet = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_UINTEGER);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error SetEnvn");
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
- return 0;
- }
- nRet = SQLGetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)&nVersion, SQL_IS_INTEGER, NULL);
- if ((nRet == SQL_SUCCESS) || (nRet == SQL_SUCCESS_WITH_INFO))
- {
- printf("ODBC Version is: %ldn", nVersion);
- }
- else
- {
- printf("Error Get ODBC Version %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hEnv, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("Error %s (%d)n State %s n", pszErrorMsg, nErrorMsg, pszSqlState);
- }
-
- // 2. allocate connection handle, set timeout
- nRet = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error AllocHDB %dn", nRet);
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
- return 0;
- }
- nRet = SQLSetConnectAttr(hDBC, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER)nTimeout, SQL_IS_INTEGER);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error SetConnectAttr %dn", nRet);
- }
- nRet = SQLGetConnectAttr(hDBC, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER)&nTimeout, SQL_IS_INTEGER, NULL);
- if ((nRet == SQL_SUCCESS) || (nRet == SQL_SUCCESS_WITH_INFO))
- {
- printf("Login Timeout is: %ldn", nTimeout);
- }
- else
- {
- printf("Error Get Login Timeout %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("Error %s (%d)n State %s n", pszErrorMsg, nErrorMsg, pszSqlState);
- }
- nRet = SQLSetConnectAttr(hDBC, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER)nTimeout, SQL_IS_INTEGER);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error SetConnectAttr %dn", nRet);
- }
- nRet = SQLGetConnectAttr(hDBC, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER)&nTimeout, SQL_IS_INTEGER, NULL);
- if ((nRet == SQL_SUCCESS) || (nRet == SQL_SUCCESS_WITH_INFO))
- {
- printf("Connection timeout is: %ldn", nTimeout);
- }
- else
- {
- printf("Error Get Connection timeout %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("Error %s (%d)n State %s n", pszErrorMsg, nErrorMsg, pszSqlState);
- }
-
- // 3. Connect to the datasource "test"
- nRet = SQLConnect(hDBC, (SQLCHAR*) "mysql", SQL_NTS,
- (SQLCHAR*) "inumen", SQL_NTS,
- (SQLCHAR*) "inumen", SQL_NTS);
- /* nRet = SQLConnect(hDBC, (SQLCHAR*) "test", SQL_NTS,
- (SQLCHAR*) "Admin", SQL_NTS,
- (SQLCHAR*) "", SQL_NTS);*/
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error SQLConnect %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("%s (%d)n", pszErrorMsg, nErrorMsg);
- SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
- return 0;
- }
- printf("Connected !n");
- nRet = SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error AllocStatement %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("%s (%d)n", pszErrorMsg, nErrorMsg);
- SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
- return 0;
- }
- nRet = SQLSetStmtAttr(hStmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER)nTimeout, SQL_IS_UINTEGER);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error Set Query Timeout %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("Error %s (%d)n State %s n", pszErrorMsg, nErrorMsg, pszSqlState);
- SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
- SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
-
- return 0;
- }
- nRet = SQLGetStmtAttr(hStmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER)&nTimeout, SQL_IS_UINTEGER, NULL);
- if ((nRet != SQL_SUCCESS) && (nRet != SQL_SUCCESS_WITH_INFO))
- {
- printf("Error Get Query Timeout %dn", nRet);
- SQLGetDiagRec(SQL_HANDLE_DBC, hDBC, 1, pszSqlState, &nNativeError,
- pszErrorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &nErrorMsg);
- printf("Error %s (%d)n State %s n", pszErrorMsg, nErrorMsg, pszSqlState);
- }
- else
- {
- printf("Query Timeout is %dn", nTimeout);
- }
- //.............................
- SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
- SQLDisconnect(hDBC);
- SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
- SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
-
- return 0;
- }
复制代码
[ 本帖最后由 stavck 于 2005-11-23 15:46 编辑 ] |
|