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);
}