Description:
Environment is as follows.
1. MDAC version - 2.70.9001.0
2. MySQL server version - mysql Ver 14.12 Distrib 5.0.24, for Win32 (ia32)
3. ODBC driver manager - version 3.520.9002.0
When MySQL server is not running and when I execute the
following code, the application crashes after SQLGetDiagRec().
Follows is the output after execution. Please note that SQL STATE is
empty.
**********
SqlState-,NativeError=2003, Msg=[MySQL][ODBC 3.51 Driver]Can't connect to MySQL
server on 'localhost' (10061), MsgLen=77
**********
This works when compiled with ANSI version. (No unicode defined).
Also I am looking for information on how to get myodbc3d.dll to get
connector traces.
Your help is greatly appreciated.
-Mano
ODBC driver trace when fail happens.
====================================
MessageTester 16b4-16b0 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 00000000
SQLHANDLE * 0012FF28
MessageTester 16b4-16b0 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 00000000
SQLHANDLE * 0x0012FF28 ( 0x00d11540)
MessageTester 16b4-16b0 ENTER SQLSetEnvAttr
SQLHENV 00D11540
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 0x00000003
SQLINTEGER 0
MessageTester 16b4-16b0 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 00D11540
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 0x00000003 (BADMEM)
SQLINTEGER 0
MessageTester 16b4-16b0 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 00D11540
SQLHANDLE * 0012FF24
MessageTester 16b4-16b0 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 00D11540
SQLHANDLE * 0x0012FF24 ( 0x00d115e8)
MessageTester 16b4-16b0 ENTER SQLConnectW
HDBC 00D115E8
WCHAR * 0x0042D038 [ -3] "MySqlODBC\ 0"
SWORD -3
WCHAR * 0x0023592C [ -3] "******\ 0"
SWORD -3
WCHAR * 0x0023592C [ -3] "******\ 0"
SWORD -3
MessageTester 16b4-16b0 EXIT SQLConnectW with return code -1 (SQL_ERROR)
HDBC 00D115E8
WCHAR * 0x0042D038 [ -3] "MySqlODBC\ 0"
SWORD -3
WCHAR * 0x0023592C [ -3] "******\ 0"
SWORD -3
WCHAR * 0x0023592C [ -3] "******\ 0"
SWORD -3
DIAG [HYT00] [MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on 'localhost' (10061) (2003)
MessageTester 16b4-16b0 ENTER SQLGetDiagRecW
SQLSMALLINT 2
SQLHANDLE 00D115E8
SQLSMALLINT 1
SQLWCHAR * 0x0012F688 (NYI)
SQLINTEGER * 0x0012F284
SQLWCHAR * 0x0012F288 (NYI)
SQLSMALLINT 1024
SQLSMALLINT * 0x0012F27C
MessageTester 16b4-16b0 EXIT SQLGetDiagRecW with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2
SQLHANDLE 00D115E8
SQLSMALLINT 1
SQLWCHAR * 0x0012F688 (NYI)
SQLINTEGER * 0x0012F284 (2003)
SQLWCHAR * 0x0012F288 (NYI)
SQLSMALLINT 1024
SQLSMALLINT * 0x0012F27C (77)
How to repeat:
- Do not start MySQL server.
Follows is the test code snippet I used.
void test_proc()
{
SQLHENV env_hdl;
SQLHDBC conn_hdl;
SQLHSTMT stmt_hdl;
SQLRETURN sql_rc;
TCHAR *szServerName = L"MySqlODBC";
TCHAR *szUserName = L"root";
TCHAR *szPassword = L"test";
TCHAR szStatement[1024];
//allocate handles for env, conn and statement
sql_rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env_hdl);
sql_rc = SQLSetEnvAttr(env_hdl, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0);
sql_rc = SQLAllocHandle(SQL_HANDLE_DBC, env_hdl, &conn_hdl);
sql_rc = SQLConnect(conn_hdl, (SQLTCHAR *)szServerName, SQL_NTSL,
(SQLTCHAR *)szUserName, SQL_NTSL,
(SQLTCHAR *)szPassword, SQL_NTSL);
if( sql_rc != SQL_SUCCESS )
{
ProcessError(SQL_HANDLE_DBC,conn_hdl);
}
sql_rc = SQLFreeHandle (SQL_HANDLE_STMT, stmt_hdl);
sql_rc = SQLDisconnect(conn_hdl);
sql_rc = SQLFreeHandle (SQL_HANDLE_DBC, conn_hdl);
sql_rc = SQLFreeHandle (SQL_HANDLE_ENV, env_hdl);
}
void ProcessError(SQLSMALLINT handleType,
SQLHANDLE hndl)
{
SQLTCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN rc;
rc = SQLGetDiagRec(handleType, hndl, 1, SqlState, &NativeError,
Msg, sizeof(Msg), &MsgLen);
_tprintf(L"SqlState-%s,NativeError=%d, Msg=%s, MsgLen=%d\n", SqlState,NativeError,Msg,MsgLen);
}
Description: Environment is as follows. 1. MDAC version - 2.70.9001.0 2. MySQL server version - mysql Ver 14.12 Distrib 5.0.24, for Win32 (ia32) 3. ODBC driver manager - version 3.520.9002.0 When MySQL server is not running and when I execute the following code, the application crashes after SQLGetDiagRec(). Follows is the output after execution. Please note that SQL STATE is empty. ********** SqlState-,NativeError=2003, Msg=[MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on 'localhost' (10061), MsgLen=77 ********** This works when compiled with ANSI version. (No unicode defined). Also I am looking for information on how to get myodbc3d.dll to get connector traces. Your help is greatly appreciated. -Mano ODBC driver trace when fail happens. ==================================== MessageTester 16b4-16b0 ENTER SQLAllocHandle SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 00000000 SQLHANDLE * 0012FF28 MessageTester 16b4-16b0 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS) SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 00000000 SQLHANDLE * 0x0012FF28 ( 0x00d11540) MessageTester 16b4-16b0 ENTER SQLSetEnvAttr SQLHENV 00D11540 SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION> SQLPOINTER 0x00000003 SQLINTEGER 0 MessageTester 16b4-16b0 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS) SQLHENV 00D11540 SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION> SQLPOINTER 0x00000003 (BADMEM) SQLINTEGER 0 MessageTester 16b4-16b0 ENTER SQLAllocHandle SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 00D11540 SQLHANDLE * 0012FF24 MessageTester 16b4-16b0 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS) SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 00D11540 SQLHANDLE * 0x0012FF24 ( 0x00d115e8) MessageTester 16b4-16b0 ENTER SQLConnectW HDBC 00D115E8 WCHAR * 0x0042D038 [ -3] "MySqlODBC\ 0" SWORD -3 WCHAR * 0x0023592C [ -3] "******\ 0" SWORD -3 WCHAR * 0x0023592C [ -3] "******\ 0" SWORD -3 MessageTester 16b4-16b0 EXIT SQLConnectW with return code -1 (SQL_ERROR) HDBC 00D115E8 WCHAR * 0x0042D038 [ -3] "MySqlODBC\ 0" SWORD -3 WCHAR * 0x0023592C [ -3] "******\ 0" SWORD -3 WCHAR * 0x0023592C [ -3] "******\ 0" SWORD -3 DIAG [HYT00] [MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on 'localhost' (10061) (2003) MessageTester 16b4-16b0 ENTER SQLGetDiagRecW SQLSMALLINT 2 SQLHANDLE 00D115E8 SQLSMALLINT 1 SQLWCHAR * 0x0012F688 (NYI) SQLINTEGER * 0x0012F284 SQLWCHAR * 0x0012F288 (NYI) SQLSMALLINT 1024 SQLSMALLINT * 0x0012F27C MessageTester 16b4-16b0 EXIT SQLGetDiagRecW with return code 0 (SQL_SUCCESS) SQLSMALLINT 2 SQLHANDLE 00D115E8 SQLSMALLINT 1 SQLWCHAR * 0x0012F688 (NYI) SQLINTEGER * 0x0012F284 (2003) SQLWCHAR * 0x0012F288 (NYI) SQLSMALLINT 1024 SQLSMALLINT * 0x0012F27C (77) How to repeat: - Do not start MySQL server. Follows is the test code snippet I used. void test_proc() { SQLHENV env_hdl; SQLHDBC conn_hdl; SQLHSTMT stmt_hdl; SQLRETURN sql_rc; TCHAR *szServerName = L"MySqlODBC"; TCHAR *szUserName = L"root"; TCHAR *szPassword = L"test"; TCHAR szStatement[1024]; //allocate handles for env, conn and statement sql_rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env_hdl); sql_rc = SQLSetEnvAttr(env_hdl, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0); sql_rc = SQLAllocHandle(SQL_HANDLE_DBC, env_hdl, &conn_hdl); sql_rc = SQLConnect(conn_hdl, (SQLTCHAR *)szServerName, SQL_NTSL, (SQLTCHAR *)szUserName, SQL_NTSL, (SQLTCHAR *)szPassword, SQL_NTSL); if( sql_rc != SQL_SUCCESS ) { ProcessError(SQL_HANDLE_DBC,conn_hdl); } sql_rc = SQLFreeHandle (SQL_HANDLE_STMT, stmt_hdl); sql_rc = SQLDisconnect(conn_hdl); sql_rc = SQLFreeHandle (SQL_HANDLE_DBC, conn_hdl); sql_rc = SQLFreeHandle (SQL_HANDLE_ENV, env_hdl); } void ProcessError(SQLSMALLINT handleType, SQLHANDLE hndl) { SQLTCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH]; SQLINTEGER NativeError; SQLSMALLINT i, MsgLen; SQLRETURN rc; rc = SQLGetDiagRec(handleType, hndl, 1, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen); _tprintf(L"SqlState-%s,NativeError=%d, Msg=%s, MsgLen=%d\n", SqlState,NativeError,Msg,MsgLen); }