#ifdef WIN32 #include #endif #include #include #include SQLINTEGER PrintError(SQLSMALLINT handleType, SQLHANDLE handle, SQLRETURN rcode) { SQLRETURN rc= SQL_ERROR; SQLTCHAR sqlState[6]; SQLTCHAR 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() { SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; SQLRETURN rc; SQLINTEGER cLength; SQLTCHAR *szServerName= L"test"; SQLTCHAR *szUserName= L"root"; SQLTCHAR *szPassword= L""; SQLTCHAR szBuffer[1024]; SQLTCHAR *szDROP_TABLE_W= L"DROP TABLE IF EXISTS bug31220"; SQLTCHAR *szCREATE_TABLE_W= L"CREATE TABLE bug31220(textcol VARCHAR(255))DEFAULT CHARSET=utf8"; SQLTCHAR *szINSERT_W= L"INSERT INTO bug31220 (textcol) VALUES (\"Звичайний текст\")"; //allocate handles for env, conn and statement rc= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); rc= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0); rc= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); rc= SQLConnectW(hdbc, szServerName, SQL_NTSL, szUserName, SQL_NTSL, szPassword, SQL_NTSL); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_DBC, hdbc, rc); printf("Connected...\n\n"); rc= SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return(PrintError(SQL_HANDLE_DBC, hdbc, rc)); rc= SQLExecDirectW(hstmt, szDROP_TABLE_W, SQL_NTSL); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_STMT, hstmt, rc); rc= SQLExecDirectW(hstmt, szCREATE_TABLE_W, SQL_NTSL); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_STMT, hstmt, rc); printf("Table Created...\n\n"); rc= SQLExecDirectW(hstmt, szINSERT_W, SQL_NTSL); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_STMT, hstmt, rc); printf("New Row Inserted...\n\n"); rc= SQLFreeStmt(hstmt, SQL_CLOSE); rc= SQLExecDirectW(hstmt, L"SELECT * FROM bug31220", SQL_NTSL); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_STMT, hstmt, rc); rc= SQLBindCol(hstmt, 1, SQL_C_WCHAR, szBuffer, sizeof(szBuffer), &cLength); if( rc != SQL_SUCCESS ) return PrintError(SQL_HANDLE_STMT, hstmt, rc); rc= SQLFetch(hstmt); printf("Buffer length: %i", cLength); rc= SQLFreeStmt(hstmt, SQL_CLOSE); rc= SQLFreeHandle (SQL_HANDLE_STMT, hstmt); rc= SQLDisconnect(hdbc); rc= SQLFreeHandle (SQL_HANDLE_DBC, hdbc); rc= SQLFreeHandle (SQL_HANDLE_ENV, henv); }