#ifdef _WIN32 #include #endif #include #include #include #include SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; #define ok_something(A, B, C) rc= B; if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO){ \ error_num= PrintError(C, A, rc); \ goto PROGRAM_END; \ } #define ok_env(B) ok_something(henv,B,SQL_HANDLE_ENV) #define ok_dbc(B) ok_something(hdbc,B,SQL_HANDLE_DBC) #define ok_stmt(B) ok_something(hstmt,B,SQL_HANDLE_STMT) SQLINTEGER PrintError(SQLSMALLINT handleType, SQLHANDLE handle, SQLRETURN rcode) { SQLRETURN rc = SQL_ERROR; SQLCHAR sqlState[6]; SQLCHAR eMsg[SQL_MAX_MESSAGE_LENGTH]; SQLINTEGER nError; SQLSMALLINT msgLen; if (rcode == SQL_NO_DATA) { printf( "NO DATA .. .. .."); return(SQL_NO_DATA); } else { rc = SQLGetDiagRec(handleType, handle, 1, sqlState, &nError, eMsg, sizeof(eMsg), &msgLen); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { printf( " Error: %s\n", eMsg); } return (SQL_ERROR); } } int main(int argc, char * argv[]) { SQLRETURN rc; SQLCHAR data[255], vcdata[512]; SQLSMALLINT columns= 0; int error_num= 0, i= 0, cnum= 0; char *dsn, *uid, *pwd; if(argc < 2) { printf("\nUSAGE:\n\nbug68778.exe DSN username password\n"); return 0; } dsn = argv[1]; uid = argv[2]; pwd = argc > 3 ? argv[3] : ""; ok_env(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv)); ok_env(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_NTS)); ok_env(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc)); printf("\nConnecting.................."); ok_dbc(SQLConnect(hdbc, (SQLCHAR*)dsn, SQL_NTS, (SQLCHAR*)uid, SQL_NTS, (SQLCHAR*)pwd, SQL_NTS)); printf("[DONE]"); ok_dbc(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt)); printf("\nCreating database..........."); ok_stmt(SQLExecDirect(hstmt, (SQLCHAR*)"DROP DATABASE IF EXISTS testdb1", SQL_NTS)); ok_stmt(SQLExecDirect(hstmt, (SQLCHAR*)"CREATE DATABASE testdb1 collate latin1_general_cs", SQL_NTS)); printf("[DONE]"); printf("\nCreating table.............."); ok_stmt(SQLExecDirect(hstmt, (SQLCHAR*)"CREATE TABLE testdb1.test_details (ID bigint(20) NOT NULL,"\ "NAME varchar(255) COLLATE latin1_general_cs NOT NULL,"\ "OWNER_NAME varchar(255) COLLATE latin1_general_cs NOT NULL,"\ "OWNER_ID bigint(20) NOT NULL, CREATED_TIME bigint(20) NOT NULL,"\ "LOGOUT_TIME bigint(20) NOT NULL, "\ "TESTER_NAME varchar(255) COLLATE latin1_general_cs NOT NULL,"\ "NO_LOGINS bigint(20) NOT NULL) "\ "ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs", SQL_NTS)); printf("[DONE]"); printf("\nInserting data.............."); ok_stmt(SQLExecDirect(hstmt, (SQLCHAR*)"insert into testdb1.test_details values"\ "(1,'tester','tester',1,1364294586,"\ "1364294693,'26_03_2013_1613',5);", SQL_NTS)); printf("[DONE]"); printf("\nSelecting data.............."); ok_stmt(SQLExecDirect(hstmt, (SQLCHAR*)"select * from testdb1.test_details", SQL_NTS)); printf("[DONE]"); printf("\nRESULTS:"); ok_stmt(SQLNumResultCols(hstmt, &columns)); while ((rc=SQLFetch(hstmt)) == SQL_SUCCESS) { printf("\n-------------------- row %d -------------------", ++i); for (cnum= 1; cnum <= columns; cnum++) { ok_stmt(SQLDescribeCol(hstmt, cnum, data, sizeof(data), NULL, NULL, NULL, NULL, NULL)); ok_stmt(SQLGetData(hstmt, cnum, SQL_C_CHAR, vcdata, sizeof(vcdata), NULL)); printf("\n %-12s : %s", data, vcdata); } } ok_stmt(SQLFreeStmt(hstmt, SQL_CLOSE)); PROGRAM_END: rc = SQLDisconnect(hdbc); rc = SQLFreeConnect(hdbc); rc = SQLFreeEnv(henv); }