Microsoft KB Archive/151407

= PRB: DAO 3.0 Must Be Used in Primary Thread =

Article ID: 151407

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 4.0 Standard Edition

 Microsoft Visual C++ 4.1 Subscription

 Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 4.2 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q151407

<div class="symptoms_section">

SYMPTOMS
Attempting to use either the MFC DAO classes or the DAO SDK dbDao classes in any thread but the primary one causes unexpected behavior.

<div class="cause_section">

CAUSE
DAO 3.0 is not marked as apartment-model or free-threaded in the registry. No multithreading testing has been done on DAO 3.0. Any documentation should say that DAO 3.0 is not thread-safe and should only be used in the primary thread in a process.

<div class="resolution_section">

RESOLUTION
Do not use MFC DAO or the DAO SDK dbDao classes in any thread but the primary thread of an application.

<div class="status_section">

STATUS
This behavior is by design.

<div class="moreinformation_section">

MORE INFORMATION
Internally, the Jet engine is multithreaded, and the registry setting \HKEY_LOCALMACHINE\Software\Microsoft\Jet\3.0\Engines\Jet\Threads controls the number of threads that the engine uses internally. The Jet engine is multithreaded internally, but neither DAO nor the Jet engine are thread- safe.

For more information on OLE threading models, see the following article in the Microsoft Knowledge Base:

150777 Descriptions and Workings of OLE Threading Models

Tech Note #64: Apartment-Model Threading in OLE Controls

<div class="references_section">