[unixODBC-dev] SQLSetConnectAttr/SQLGetConnectAttr attribute values

Nick Gorham nick at lurcher.org
Tue May 11 20:16:43 BST 2010


Jack.Schueler at sybase.com wrote:
>
> I ran into the following 32-bit/64-bit ODBC issue.
>
> The current Microsoft spec for SQLSetConnectAttr/SQLGetConnectAttr 
> describes the numeric attribute values as SQLUINTEGER.  This is at 
> variance with the SQLSetStmtAttr/SQLGetStmtAttr attribute values which 
> are described as SQLULEN.
>
> There is one connection attribute, SQL_ATTR_ODBC_CURSORS, that is 
> handled by the Microsoft ODBC Driver Manager. The ODBC spec says the 
> following.
> ------------------
> SQL_ATTR_ODBC_CURSORS (ODBC 2.0)
>
> An SQLUINTEGER value specifying how the Driver Manager uses the ODBC 
> cursor library:
>
> SQL_CUR_USE_IF_NEEDED = The Driver Manager uses the ODBC cursor 
> library only if it is needed. If the driver supports the 
> SQL_FETCH_PRIOR option in *SQLFetchScroll*, the Driver Manager uses 
> the scrolling capabilities of the driver. Otherwise, it uses the ODBC 
> cursor library.
>
> SQL_CUR_USE_ODBC = The Driver Manager uses the ODBC cursor library.
>
> SQL_CUR_USE_DRIVER = The Driver Manager uses the scrolling 
> capabilities of the driver. This is the default setting.
> ------------------
>
> Despite what the spec says, here is the observed behavior in a 64-bit 
> test application that I wrote.
>
> The SQLGetConnectAttr call is handled in the driver manager.   Notice 
> the before and after value.  This is NOT treated as SQLUINTEGER.
>
>                         0x1234567812345678        unsigned __int64
> rc = SQLGetConnectAttr( hdbc, attr, &datavalue, 0, 0 );
>                         0x0000000000000002        unsigned __int64
>
>
> I checked out the behaviour of the Microsoft SQL Server ODBC driver, 
> wondering if the spec was in error.  For all other connection 
> attributes, Microsoft's ODBC driver returns SQLUINTEGER (the same 
> behavior as the SQL Anywhere ODBC driver).
>
> I would rule the SQL_ATTR_ODBC_CURSORS behavior as a Microsoft Driver 
> Manager bug.
>
> A question for the unixODBC folks.  How do you handle the numeric 
> attribute values for SQLSetConnectAttr/SQLGetConnectAttr - SQLUINTEGER 
> or SQLULEN?
>
> Jack Schueler
>
>   
Hi,

For better or worst, unixODBC 2.3.0 treats the attribute in question as 
a SQLLEN.

-- 
Nick


More information about the unixODBC-dev mailing list