#ifndef UNICODE #define UNICODE #endif #ifndef _UNICODE #define _UNICODE #endif #include #include #include #include #include #define _tsizeof(S) sizeof(S) / sizeof(S[0]) #define CONN_351 TEXT("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;Regional=No;UID=root;PWD=mysql;Trusted_Connection=no;DATABASE=dt4ed;Option=7") #define CONN_510 TEXT("DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;Regional=No;UID=root;PWD=mysql;Trusted_Connection=no;DATABASE=dt4ed;Option=7") int _tmain(int argc, LPTSTR *argv) //******************************** { SQLHENV hEnv; SQLHDBC hDBC; BOOL bODBC_51 = (argc > 1); SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC); SQLSetConnectAttr(hDBC, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); SQLSetConnectAttr(hDBC, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER)5, 0); TCHAR szTmp[512] = {0}; SHORT dwLen = 0; LPTSTR szConn = ( bODBC_51 ) ? CONN_510 : CONN_351; SQLDriverConnect(hDBC, NULL, (SQLTCHAR *)szConn, _tcslen(szConn), (SQLTCHAR *)szTmp, _tsizeof(szTmp), &dwLen, SQL_DRIVER_NOPROMPT); _tprintf(TEXT("%s\n"), szTmp); SQLHSTMT hStmt; // // Re-create the table // SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt); SQLExecDirect(hStmt, (SQLTCHAR*)TEXT("DROP TABLE IF EXISTS t"), SQL_NTS); SQLExecDirect(hStmt, (SQLTCHAR*)TEXT("CREATE TABLE t ( Path NVARCHAR(256) )"), SQL_NTS); SQLFreeStmt(hStmt, SQL_DROP); // // Select the data using column binding // LPTSTR pData = TEXT("x"); LONG i = SQL_NTS; SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt); if ( bODBC_51 ) { SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_WVARCHAR, 256, 0, pData, _tcslen(pData), &i); } else { SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_VARCHAR, 256, 0, pData, _tcslen(pData), &i); } // // This one will fail for myODBC 3.51.21, and succeed for myODBC 5.1.x // int RetCode = SQLExecDirect(hStmt, (SQLTCHAR*)TEXT("SELECT DISTINCT Path FROM t WHERE Upper(Path) = Upper(?)"), SQL_NTS); _tprintf(TEXT("SELECT: RetCode %d\n"), RetCode); SQLFreeStmt(hStmt, SQL_DROP); SQLEndTran(SQL_HANDLE_DBC, hDBC, SQL_COMMIT); SQLDisconnect(hDBC); SQLFreeHandle(SQL_HANDLE_DBC, hDBC); SQLEndTran(SQL_HANDLE_ENV, hEnv, SQL_COMMIT); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return 0; }