Microsoft KB Archive/840667

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

Article ID: 840667

Article Last Modified on 12/27/2006

-

APPLIES TO


 * Microsoft ActiveX Data Objects 2.7
 * Microsoft SQL Server 2000 Analysis Services

-



SYMPTOMS
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.



CAUSE
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.



RESOLUTION
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.



STATUS
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.



WORKAROUND
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.

