Help and Support
 

powered byLive Search

FIX: SQLOLEDB Provider incorrectly leaves transaction open

Article ID:281633
Last Review:September 26, 2005
Revision:6.4
This article was previously published under Q281633
BUG #: 58292 (SQLBUG_70)
BUG #: 235846 (SHILOH)
On This Page

SYMPTOMS

Running a certain sequence of commands involving explicit transactions and parameters in an application program using the SQLOLEDB Provider incorrectly leaves an uncommitted transaction open. This can cause severe blocking and other problems.

Back to the top

CAUSE

Although the SET option 'implicit_transactions' is set to OFF, the SQLOLEDB Provider is opening an implicit transaction.

Back to the top

RESOLUTION

MDAC 2.6

To resolve this problem, obtain the latest service pack for Microsoft Data Access Components 2.6. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:
300635 (http://support.microsoft.com/kb/300635/) How to obtain the latest MDAC 2.6 service pack

Back to the top

Hotfix

IMPORTANT: Microsoft Data Access Components version 2.6 must be installed before applying this hotfix.

The English version of this fix should have the following file attributes or later:
   Date       Time     Version     Size      File name      Platform
   -----------------------------------------------------------------
   11/22/00   8:43pm   8.00.0225   491,584   Sqloledb.dll   Intel
   11/22/00   8:43pm   8.00.0225    61,440   Sqloledb.rll   Intel
				
NOTE: Due to file dependencies, the most recent hotfix or feature that contains the above files may also contain additional files.

Back to the top

WORKAROUND

To work around this problem, do either of the following:
Use the OLEDB Provider for ODBC rather than the SQLOLEDB Provider.

-or-
Put additional transactions around the code that creates the problem.

Back to the top

STATUS

Microsoft has confirmed this to be a problem in the Microsoft OLE DB Provider for SQL Server that is included in Microsoft Data Access Components (MDAC) versions 2.1, 2.5, and 2.6.

MDAC 2.6

This problem was first corrected in Microsoft Data Access Components 2.6 Service Pack 1.


MDAC 2.5

This problem was first corrected in the version of Sqlredis.exe that is included with Microsoft SQL Server 7.0 Service Pack 4.

Back to the top

MORE INFORMATION

Through tracing the application, you can see in SQL Server Profiler that the SQLOLEDB Provider is sending the following statements to SQL Server:
SET FMTONLY ON select ... SET FMTONLY OFF
set implicit_transactions off SET NO_BROWSETABLE OFF
				
This causes an 'implicit_transaction' being already opened.

When using the OLEDB Provider for ODBC and the SQL Server driver instead, the exact same Visual Basic/ADO code sends the following statements to SQL Server:
set implicit_transactions off SET NO_BROWSETABLE OFF
SET FMTONLY ON select  ... SET FMTONLY OFF
				
Thus the FMTONLY SELECT opens an implicit transaction with SQLOLEDB. However, because the application never opened this transaction, the application will normally never close it. This transaction will only be closed upon the next explicit transaction.

Back to the top


APPLIES TO
Microsoft SQL Server 7.0 Standard Edition
Microsoft SQL Server 2000 Standard Edition
Microsoft Data Access Components 2.1
Microsoft Data Access Components 2.5
Microsoft Data Access Components 2.6

Back to the top

Keywords: 
kbhotfixserver kbqfe kbbug kbfix kbmdac260sp1fix kbqfe KB281633

Back to the top

Article Translations

 

Related Support Centers

Other Support Options

  • Need More Help?
    Contact a Support professional by Email, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.