[freetds] SQLGetTypeInfo() fails when it is called for the second time (10/08/2008 Dmitry Basko)

marko68 GMX marko68 at gmx.net
Wed Oct 8 17:00:51 EDT 2008


Hi,

Yesterday I tried freetds (v0.82) on Mac OS 10.5 (Intel) and now have
a question in this regard. I would appreciate it very much is someone
could give me an advice, as I seem to run out of ideas what can be
wrong. The following piece of the code does not work if it is called
sequentially:

find_an_appropriate_data_type(...)
{
 SQLBindCol(hToStmt, 1, SQL_C_CHAR, szTypeName ...);
 SQLBindCol(hToStmt, 3, SQL_C_LONG, &cbMaxPrec,...);
 ...
 SQLGetTypeInfo(hstmt, fSqlType) (where fSqlType is 5 (small integer))
 SQLFetch(hstmt);
 ...
 SQLFreeStmt(hstmt, SQL_CLOSE);
 
 if !(does_the_found_MS_SQL_data_type_suit_us)
    try another one;
}
 The main idea behind this cycle is an attempt to figure out the right
 correspondence between available (supported by the application) data
 types and the ones supported by MS SQL. The first call of the
 function returns the requested type info, but the second call
 fails: SQLGetTypeInfo returns -1. The call of SQLGetDiagRec
 returns the following error:

 08S01 - [FreeTDS][SQL Server]Communication link failure

Alas, the ODBC tracing long does not contain any useful information:
 --

                A02D7FA0 ENTER SQLBindCol
                SQLHSTMT          0x208e70
                SQLUSMALLINT      1
                SQLSMALLINT       1 (SQL_C_CHAR)
                SQLPOINTER        0xbffee008
                SQLLEN            32
                SQLLEN          * 0xbffee004

                A02D7FA0 EXIT  SQLBindCol with return code 0 (SQL_SUCCESS)
                SQLHSTMT          0x208e70
                SQLUSMALLINT      1
                SQLSMALLINT       1 (SQL_C_CHAR)
                SQLPOINTER        0xbffee008
                SQLLEN            32
                SQLLEN          * 0xbffee004 (2132496)

                A02D7FA0 ENTER SQLGetTypeInfo
                SQLHSTMT          0x208e70
                SQLSMALLINT       5 (SQL_SMALLINT)

                A02D7FA0 EXIT  SQLGetTypeInfo with return code 0 (SQL_SUCCESS)
                SQLHSTMT          0x208e70
                SQLSMALLINT       5 (SQL_SMALLINT)

                A02D7FA0 ENTER SQLFetch
                SQLHSTMT          0x208e70

                A02D7FA0 EXIT  SQLFetch with return code 0 (SQL_SUCCESS)
                SQLHSTMT          0x208e70
                
                A02D7FA0 ENTER SQLFreeStmt
                SQLHSTMT          0x208e70
                SQLUSMALLINT      0 (SQL_CLOSE)

                A02D7FA0 EXIT  SQLFreeStmt with return code 0 (SQL_SUCCESS)
                SQLHSTMT          0x208e70
                SQLUSMALLINT      0 (SQL_CLOSE)

                A02D7FA0 ENTER SQLGetTypeInfo
                SQLHSTMT          0x208e70
                SQLSMALLINT       5 (SQL_SMALLINT)

                A02D7FA0 EXIT  SQLGetTypeInfo with return code -1 (SQL_ERROR)
                SQLHSTMT          0x208e70
                SQLSMALLINT       5 (SQL_SMALLINT)

                A02D7FA0 EXIT  SQLGetDiagRec with return code 0 (SQL_SUCCESS)
                SQLSMALLINT       3 (SQL_HANDLE_STMT)
                SQLHSTMT          0x208e70
                SQLSMALLINT       1
                SQLCHAR         * 0xbffeddf2
                                  | 08S01                                    |
                SQLINTEGER      * 0xbffedd80 (0)
                SQLCHAR         * 0xbffedb7a
                                  | [FreeTDS][SQL Server]Communication link  |
                                  | failure                                  |
                SQLSMALLINT       512
                SQLSMALLINT     * 0x0
                
                
It looks like the connection is broken but why?

-- 
Thanks,
 Marko




More information about the FreeTDS mailing list