[freetds] SQLExecDirect() of transaction statement returnsSQL_NO_DATA

ZIGLIO, Frediano, VF-IT Frediano.Ziglio at vodafone.com
Tue Jan 8 08:09:34 EST 2008


> 
> Is it expected that an SQLExecDirect("BEGIN TRANSACTION") 
> returns SQL_NO_DATA (100) ?
> 
> I would maybe expect SQL_SUCCESS_WITH_INFO, but not SQL_NO_DATA ...
> 
> Attached, a sample to reproduce, give me this output:
> 
>  >> SQLExecDirect return code = 100 for [BEGIN TRANSACTION]
>  >> SQLExecDirect return code = 100 for [COMMIT TRANSACTION]
>  >> SQLExecDirect return code = 100 for [BEGIN TRANSACTION]
>  >> SQLExecDirect return code = 100 for [ROLLBACK TRANSACTION]
>  >> SQLExecDirect return code = 100 for [SET TRANSACTION 
> ISOLATION LEVEL READ UNCOMMITTED]
>  >> SQLExecDirect return code = 100 for [SET TRANSACTION 
> ISOLATION LEVEL READ COMMITTED]
>  >> SQLExecDirect return code = 100 for [SET TRANSACTION 
> ISOLATION LEVEL REPEATABLE READ]
>  >> SQLExecDirect return code = 100 for [SET TRANSACTION 
> ISOLATION LEVEL SERIALIZABLE]
> 
> Seb
> 

Using ODBC 3 SQLExecDirect/SQLExecute can return SQL_NO_DATA with means
SQL_SUCCESS with no rows, from manual

"If SQLExecDirect executes a searched update or delete statement that
does not affect any rows at the data source, the call to SQLExecDirect
returns SQL_NO_DATA.
"

there are more sligthly difference between MS ODBC and our driver but
any ODBC compliant applications should support both results (in this
case is complitely correct). Personally sometimes I use a macro defined
as

#define SQL_SUCCEEDED_EX(rc) (((rc) & 2) == 0)

which catches SQL_SUCCESS, SQL_SUCCESS_WITH_INFO and SQL_NO_DATA.

freddy77


More information about the FreeTDS mailing list