#ifdef WIN32 #include #endif #include #include #include #include SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; 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 .. .. ..\n"); 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 connOut[255], szName[128]; /* buffer for connection output */ SQLSMALLINT szConnOut, colcount, i; SQLINTEGER cbName; SQLCHAR ColumnName[64]= ""; SQLSMALLINT NameLength= 0; SQLSMALLINT DataType= 0; SQLUINTEGER ColumnSize= 0; SQLSMALLINT DecimalDigits= 0; SQLSMALLINT Nullable= 0; clock_t start, finish; double elapsed_time; if(argc < 3) { printf("\nUsage:\nbug46411 conn_string sql_query_to_prepare\n" "EXAMPLE:\nbug4611 \"DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;USER=myuser;PASSWORD=mypass;DATABASE=mydb;\" \"SELECT * FROM\""); return 0; } start = clock(); rc = SQLAllocEnv(&henv); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(PrintError(SQL_HANDLE_ENV, henv, rc)); rc = SQLAllocConnect(henv, &hdbc); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(PrintError(SQL_HANDLE_ENV, henv, rc)); printf("\nTrying to connect..."); rc = SQLDriverConnect(hdbc, NULL, argv[1], SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); finish = clock(); elapsed_time = (double)(finish - start) / CLOCKS_PER_SEC; printf( "Connected\nSQLDriverConnect() takes %6.2f seconds.\n", elapsed_time ); rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(PrintError(SQL_HANDLE_DBC, hdbc, rc)); start = clock(); printf("Preparing \"%s\"\n", argv[2]); rc = SQLPrepare(hstmt, argv[2], SQL_NTS); if (rc != SQL_SUCCESS) return(PrintError(SQL_HANDLE_STMT, hstmt, rc)); finish = clock(); elapsed_time = (double)(finish - start) / CLOCKS_PER_SEC; printf( "SQLPrepare() takes %6.2f seconds.\n", elapsed_time ); start = clock(); printf("Getting result colums count..."); rc = SQLNumResultCols(hstmt, &colcount); if (rc != SQL_SUCCESS && rc != SQL_NO_DATA) return(PrintError(SQL_HANDLE_STMT, hstmt, rc)); printf("[%i]\n", colcount); finish = clock(); elapsed_time = (double)(finish - start) / CLOCKS_PER_SEC; printf( "SQLNumResultCols() takes %6.2f seconds.\n", elapsed_time ); printf("Describing columns...\n"); for (i= 0; i < colcount; i++) { start = clock(); rc= SQLDescribeCol(hstmt, i+1, ColumnName, 64, &NameLength, &DataType, &ColumnSize, &DecimalDigits, &Nullable); if (rc != SQL_SUCCESS && rc != SQL_NO_DATA) return(PrintError(SQL_HANDLE_STMT, hstmt, rc)); printf( "Column #: %d, Column Name: %s, Data Type: %d, Column Size: %d, Decimal Digits: %d, Nullable: %d\n", i+1, ColumnName, DataType, ColumnSize, DecimalDigits, Nullable); finish = clock(); elapsed_time = (double)(finish - start) / CLOCKS_PER_SEC; printf( "SQLDescribeCol() takes %6.2f seconds.\n", elapsed_time ); } printf("Disconnecting...\n"); rc = SQLFreeStmt(hstmt, SQL_DROP); rc = SQLDisconnect(hdbc); rc = SQLFreeConnect(hdbc); rc = SQLFreeEnv(henv); }