You receive unexpected errors when using ADO and ADO MD in a .NET Framework application

S’applique à : .NET Framework

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.


In a Microsoft .NET Framework application, you can use Microsoft ActiveX Data Objects (ADO) and Microsoft ActiveX Data Objects (Multidimensional) (ADO MD) through COM interop. Sometimes, under stress, .NET Framework applications that use these technologies experience unexpected errors such as crashes and other intermittent exceptions. This is particularly common with multi-threaded applications such as those that run in Microsoft ASP.NET.


ADO and ADO MD were designed before the release of the .NET Framework, and were intended to be used in an unmanaged Component Object Model (COM) environment. Although you can access these technologies through COM interop, we do not recommend that you do this. This includes the use of the ADO Primary Interop Assembly that is included with Microsoft Visual Studio .NET.

Because they are not intended to be used in this way, ADO and ADO MD have not been heavily tested in interop scenarios.


We recommend that you use Microsoft ADO.NET or Microsoft ADOMD.NET instead of using classic ADO or ADO MD through interop. These technologies were developed specifically to provide data access in .NET Framework applications and do not require the added complexity of COM interop.


There will not be any future fixes or enhancements to these components to correct problems that only occur in a managed .NET Framework application. Generally, this does not affect future fixes or enhancements to ADO and ADO MD. We will continue to address issues that occur from the use of ADO and ADO MD in unmanaged applications, including Microsoft Visual Basic 6.0, Microsoft Visual C++, and Microsoft ASP.


To work around this problem in Microsoft ASP.NET, set the ASPCompat attribute of the @ Page directive to true. When this attribute is set to true, the page can be executed on a single-threaded apartment (STA) thread. Executing a page on an STA thread reduces the chance of unexpected multi-threaded access to the ADO object or to the ADO MD object.

Note Only use this as a temporary workaround while the code is being migrated to ADO.NET or to ADOMD.NET.

.NET Framework applications that use classic ADO must use the Primary Interop Assembly for ADO that is included with Visual Studio .NET. This workaround may reduce some problems. However, it may not prevent all issues. Do not use this workaround as a long-term solution.


ADO.NET is provided as part of the Microsoft .NET Framework. For more information about the .NET Framework, visit the following Microsoft Developer Network (MSDN) Web site:The following file is available for download from the Microsoft Download Center:
Download Download the ADOMD.NET package now.For additional information about how to download Microsoft Support files, click the following article number to view the article in the Microsoft Knowledge Base:
119591 How to Obtain Microsoft Support Files from Online Services
Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help to prevent any unauthorized changes to the file.