#include #include #include #include //#include #ifndef TRUE #define TRUE 1 #endif #define MAXCOLS 100 #define MAX_DATA_LEN 255 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) // { // //std::cout << "NO DATA .. .. .." << std::endl; // 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) // { // //std::cout << " Error: " << eMsg << std::endl; // } // return (SQL_ERROR); // } //} int main(int argc, char * argv[]) { //return(PrintError(SQL_HANDLE_ENV, henv, rc)); argv[1] = "TestBug35957"; argv[2] = "root"; argv[3] = "*****"; argv[4] = ""; SQLRETURN rc; rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); std::cout << "Connecting to " << argv[1] << std::endl; rc = SQLConnect(hdbc, (SQLCHAR *)argv[1], SQL_NTS, (SQLCHAR *)argv[2], SQL_NTS, (SQLCHAR *)argv[3], SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); /*************************************************************************************/ rc = SQLExecDirect(hstmt, (SQLCHAR *)"DROP TABLE IF EXISTS bug35957", SQL_NTS); rc = SQLExecDirect(hstmt, (SQLCHAR *)"CREATE TABLE bug35957 ( COL1 INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, lt LONGTEXT)", SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLExecDirect(hstmt, (SQLCHAR *)"INSERT INTO bug35957 VALUES (NULL, 'BLAHBLAHBLAH')", SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLPrepare(hstmt, (SQLCHAR *)"SELECT lt FROM bug35957 WHERE lt = ?", SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); SQLSMALLINT numparam; rc = SQLNumParams(hstmt,&numparam); std::cout << "Num params -> " << numparam << std::endl; rc = SQLExecute(hstmt); SQLSMALLINT type; SQLUINTEGER precision; SQLSMALLINT scale; SQLSMALLINT nullable; rc = SQLDescribeParam(hstmt, 1, &type, &precision, &scale, &nullable); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); if (type = 12) { std::cout << "Unexpected type -> " << type << std::endl; } /*************************************************************************************/ rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLDisconnect(hdbc); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLFreeHandle(SQL_HANDLE_DBC, hdbc); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); rc = SQLFreeHandle(SQL_HANDLE_ENV, henv); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(-1); return(0); }