BUG: S1000 Error When Sharing Connection in Multiple Threads

ID: Q175313


The information in this article applies to:
  • Microsoft ODBC Driver for SQL Server, versions 2.0, 3.0
  • Microsoft Visual C++, 32-bit Editions, version 5.0


SYMPTOMS

When sharing a CDatabase object between multiple threads and using the SQL Server ODBC driver version 2.65.0240 or later, the following error occurs:

SQLSTATE: S1000
[Microsoft][ODBC SQL Server Driver]Connection is busy with the results for another hstmt


CAUSE

This error occurs because of a timing conflict in the SQL Server ODBC driver. If two threads are in the process of calling SQLPrepare(), followed by a SQLExecute() call, this error may occur.


RESOLUTION

Put CRecordset::Open() calls within a critical section to guarantee that only one thread is executing a SQL command on the connection at a given time.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft SQL Server driver. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.


MORE INFORMATION

Following is a code sample that can cause this error to occur:

Sample code


   void CDBProblemDlg::OnDoDatabase()
   {
      //Open connection to database
      m_DB.Open();
      CSQLRecordSet rs(&m_DB);

      StartThread(&m_DB);

      if ( rs.Open(CRecordset::dynaset) )
      {
          .
          .
          .
          SQLRecordSet.Close();
      }
   }

      void StartThread(CDatabase * pDB)
   {
      AfxBeginThread(InitThreadProc, pDB, THREAD_PRIORITY_NORMAL);
   }

   UINT CDBProblemDlg::InitThreadProc( LPVOID pParam )
   {
      CDatabase* pDB = (CDatabase*) pParam;
      if (pDB->IsOpen())
      {
         CSQLRecordSet SQLRecordSet(pDB);

         if (SQLRecordSet.Open(CRecordset::dynaset))
         {
            .
            .
            .
            SQLRecordSet.Close();
         }
      }
   } 

Additional query words: VC++ kbDatabase kbMFC kbODBC kbSQLServ kbVC500 kbDSupport

Keywords :
Version : WINDOWS:2.0,3.0; winnt:5.0
Platform : WINDOWS winnt
Issue type : kbbug


Last Reviewed: August 23, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.