Share via

How to debug "Invalid transaction state" error in ODBC?

Igor Korot 56 Reputation points
2025-01-18T19:19:58.4133333+00:00

Hi, ALL,

I have an application that throws an aforementioned error upon exit/disconnect.

I know that every transaction I start I COMMIT/ROLLBACK and those transactions are doing "CREATE TABLE/INSERT" statements.

However I am also doing SELECT statements outside of explicit BEGIN {TRANSACTION} statement.

Unfortunately the doc at https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqldisconnect-function?view=sql-server-ver16 does not help with identifying what and where the error is coming from.

My question now is: do I have to COMMIT/ROLLBACK every single SELECT, INSERT, DELETE and CREATE to fix that error?

Also, I'm calling:

ret = SQLSetConnectAttr( m_hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER) FALSE, 0 );

in my application.

Please advise.

Thx.

SQL Server | Other

1 answer

Sort by: Most helpful
  1. Erland Sommarskog 133.9K Reputation points MVP Volunteer Moderator
    2025-01-18T19:33:32.1+00:00

    If I understand this line correctly:

    ret = SQLSetConnectAttr( m_hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER) FALSE, 0 );

    You are turning off auto-commit, or in SQL Server parlance, you are setting the option IMPLICIT_TRANSACTIONS ON. (The default for this setting is OFF.) When this setting is ON, any DML or DDL statement, including SELECT; starts a transaction, which must be explicitly committed and rolled back.

    This is a very odd creature in the SQL Server world, but it is actually standard, so this is the norm in many other products.

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.