BUG: S1000 Error When Sharing Connection in Multiple ThreadsLast reviewed: December 9, 1997Article ID: Q175313 |
The information in this article applies to:
SYMPTOMSWhen 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 CAUSEThis 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.
RESOLUTIONPut 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.
STATUSMicrosoft 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 INFORMATIONFollowing is a code sample that can cause this error to occur:
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++
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |