#if defined(WIN32) #include #endif #include "sql.h" #include "sqlext.h" #include "sqltypes.h" #include #include #include #include #include #include #define NUMBER_THREADS 40 #define UDA_MAX_STRING_LENGTH 1024 void print_error( char * api, SQLSMALLINT HandleType, SQLHANDLE Handle ) { SQLRETURN rc = SQL_SUCCESS; SQLCHAR Sqlstate[ SQL_MAX_MESSAGE_LENGTH ]; SQLINTEGER NativeErrorPtr; SQLCHAR MessageText[ SQL_MAX_MESSAGE_LENGTH ]; SQLSMALLINT BufferLength = sizeof( MessageText ); SQLSMALLINT TextLengthPtr; int i = 1; while( SQL_NO_DATA != SQLGetDiagRec ( HandleType, Handle, i++, Sqlstate, &NativeErrorPtr, MessageText, BufferLength, &TextLengthPtr ) ) { printf( "api = %s, Error: %s\n", api, MessageText ); } } SQLRETURN connect1( SQLHANDLE * henv, SQLHANDLE * hdbc ) { SQLRETURN rc = SQL_SUCCESS; rc = SQLAllocHandle ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, henv ); if ( rc != SQL_SUCCESS ) { print_error( "SQLAllocHandle", SQL_HANDLE_ENV, NULL ); } rc = SQLSetEnvAttr(*henv, SQL_ATTR_ODBC_VERSION, ( SQLPOINTER )SQL_OV_ODBC3, 0); if ( rc != SQL_SUCCESS ) { print_error( "SQLSetEnvAttr", SQL_HANDLE_ENV, *henv ); } rc = SQLAllocHandle( SQL_HANDLE_DBC, *henv, hdbc ); if ( rc != SQL_SUCCESS ) { print_error( "SQLAllocHandle", SQL_HANDLE_ENV, *henv ); } rc = SQLSetConnectAttr ( *hdbc, SQL_LOGIN_TIMEOUT, 0, 0 ); if ( rc != SQL_SUCCESS ) { print_error( "SQLSetConnectAttr", SQL_HANDLE_DBC, *hdbc ); } { SQLHWND WindowHandle = NULL; SQLCHAR InConnectionString[ 1024 ] = "DSN=GOSALES1_PG_92;UID=gosales1;PWD=gosales1"; SQLSMALLINT StringLength1 = sizeof( InConnectionString ); SQLCHAR OutConnectionString[ 1024 ]; SQLSMALLINT BufferLength = sizeof( OutConnectionString ); SQLSMALLINT StringLength2Ptr; SQLUSMALLINT DriverCompletion = SQL_DRIVER_COMPLETE; rc = SQLDriverConnect( *hdbc, WindowHandle, InConnectionString, StringLength1, OutConnectionString, BufferLength, &StringLength2Ptr, DriverCompletion ); if ( rc != SQL_SUCCESS ) { print_error( "SQLDriverConnect", SQL_HANDLE_DBC, *hdbc ); } } return rc; } SQLRETURN disconnect1( SQLHENV henv, SQLHDBC hdbc ) { SQLRETURN rc = SQL_SUCCESS; rc = SQLDisconnect( hdbc ); if ( rc != SQL_SUCCESS ) { print_error( "SQLDisconnect", SQL_HANDLE_DBC, hdbc ); } rc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ); if ( rc != SQL_SUCCESS ) { print_error( "SQLFreeHandle", SQL_HANDLE_DBC, hdbc ); } rc = SQLFreeHandle( SQL_HANDLE_ENV, henv ); if ( rc != SQL_SUCCESS ) { print_error( "SQLFreeHandle", SQL_HANDLE_ENV, henv ); } return rc; } SQLRETURN getDatabaseInfo( SQLHENV henv, SQLHDBC hdbc ) { SQLSMALLINT StringLengthPtr; SQLRETURN rc = SQL_SUCCESS; union { SQLCHAR infoChar [ UDA_MAX_STRING_LENGTH + 4 ]; SQLUINTEGER infoUInteger ; SQLUSMALLINT infoUSmallInt ; } infoData; rc = SQLGetInfo ( hdbc, SQL_DBMS_NAME, infoData.infoChar, sizeof(infoData.infoChar), &StringLengthPtr ); if ( rc != SQL_SUCCESS ) { print_error( "SQLGetInfo", SQL_HANDLE_DBC, hdbc ); } printf ("SQL_DBMS_NAME = %s, StringLengthPtr = %d \n", infoData.infoChar, StringLengthPtr ); rc = SQLGetInfo ( hdbc, SQL_DBMS_VER, infoData.infoChar, sizeof(infoData.infoChar), &StringLengthPtr ); if ( rc != SQL_SUCCESS ) { print_error( "SQLGetInfo", SQL_HANDLE_DBC, hdbc ); } printf ("SQL_DBMS_VER = %s, StringLengthPtr = %d \n", infoData.infoChar, StringLengthPtr ); rc = SQLGetInfo ( hdbc, SQL_DRIVER_NAME, infoData.infoChar, sizeof(infoData.infoChar), &StringLengthPtr ); if ( rc != SQL_SUCCESS ) { print_error( "SQLGetInfo", SQL_HANDLE_DBC, hdbc ); } printf ("SQL_DRIVER_NAME = %s, StringLengthPtr = %d \n", infoData.infoChar, StringLengthPtr ); rc = SQLGetInfo ( hdbc, SQL_DRIVER_VER, infoData.infoChar, sizeof(infoData.infoChar), &StringLengthPtr ); if ( rc != SQL_SUCCESS ) { print_error( "SQLGetInfo", SQL_HANDLE_DBC, hdbc ); } printf ("SQL_DRIVER_VER = %s, StringLengthPtr = %d \n", infoData.infoChar, StringLengthPtr ); return rc; } void test1( void *dummyPtr ) { SQLRETURN rc = SQL_SUCCESS; SQLHENV henv; SQLHDBC hdbc; rc = connect1( &henv, &hdbc ); if ( rc != SQL_SUCCESS ) { printf( "connect() failed \n" ); } rc = getDatabaseInfo( henv, hdbc ); if ( rc != SQL_SUCCESS ) { printf( "getDatabaseInfo() failed \n" ); } rc = disconnect1( henv, hdbc ); if ( rc != SQL_SUCCESS ) { printf( "disconnect() failed \n" ); } } int main(int argc, char *argv[]) { test1( NULL ); return 0; } void strupr1( char *str ) { char * c; for( c = str; *c != '\0'; c++ ) { *c = toupper( *c ); } }