Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Внимание ADO и ADO MD не са напълно тествани в среда на Microsoft .NET Framework. Те може да причини временни проблеми, особено в сервизни приложения или приложения на много нишки. Техниките, които се обсъждат в тази статия трябва да се използва само като временна мярка по време на миграцията към ADO.NET. Трябва да използвате само тези техники, след като сте извършили пълен тестове, за да се уверете, че няма проблеми със съвместимостта. Проблеми, причинени от използването на ADO или ADO MD по този начин не се поддържат. За повече информация вижте следната статия в базата знания на Microsoft:

840667 получите неочаквани грешки при използване на ADO и ADO MD в приложение на .NET Framework

Симптоми

Да разгледаме следния сценарий. На компютър, работещ под Windows 7 Service Pack 1 (SP1) или Windows Server 2008 R2 SP 1 или че има инсталиран KB9823246 да компилирате приложение от Microsoft ActiveX Data Objects (ADO) по един от следните приложения:

  • Microsoft Visual C++

  • Microsoft Visual Basic for Applications (VBA)

  • Microsoft Visual Basic 6

  • Microsoft .NET приложения

В този случай можете да намерите, че приложението не се изпълнява на ниво операционни системи. Например той не се изпълнява версия на Windows 7, Windows Vista и други по-ранни версии на Windows. В зависимост от вашата изпълнение и получавате съобщение за грешка, подобно на някое от следните неща. (Може да получите други съобщения за грешки).

Съобщение за грешка 1

REGDB_E_CLASSNOTREG (0x80040154)

Съобщение за грешка 2

E_POINTER (0x80004003)

Съобщение за грешка 3

E_NOINTERFACE (0x80004002)

Съобщение за грешка 4

Не може да участват COM обект от тип "System.__ComObject" интерфейс тип "ADODB. Връзката ". Тази операция е неуспешна, защото QueryInterface обаждане на COM компонент за интерфейс с IID '{00001550-0000-0010-8000-00AA006D2EA4}' е неуспешно поради следната грешка: не се поддържа подобен интерфейс (изключение от HRESULT: 0x80004002 (E_NOINTERFACE)). "

Следните Visual C++ код сегмент репликира този проблем.

#import " msado15.dll" no_namespace rename("EOF","EndOfFile") 
int main()
{
CoInitialize(NULL);
_ConnectionPtr pConnection = NULL;
HRESULT hr = pConnection.CreateInstance(__uuidof(Connection)); //hr gets E_NOINTERFACE here
}

Следните Visual Basic for Applications код сегмент репликира този проблем.

Private Sub Form_Load() Dim Conn As New ADODB.Connection ‘Runtime error here: Class does not support Automation or does not support expected interface
End Sub

VBA грешка: Грешки по време на изпълнение "430": клас не поддържа автоматизация или не поддържа тази очаквания интерфейс

Забележка: Microsoft вече не поддържа Първично междуоперационно асемблиране за ADO и вече не поддържа Visual Basic 6. За повече информация за Visual Basic 6 възможност за поддръжка посетете следната уеб страница на MSDN:

Отчет за поддръжка за Visual Basic 6.0 за Windows Vista, Windows Server 2008 и Windows 7За повече информация относно Първично междуоперационно асемблиране за ADO възможност за поддръжка щракнете върху следния номер на статия в базата знания на Microsoft:

318559 използване Първично междуоперационно асемблиране за ADO (ADODB) в Visual Studio .NET

Причина

Този проблем възниква, защото някои ADO интерфейси са променени в Windows 7 SP1 са свързани с нов екземпляр идентификатори (IIDs). По-стари IID интерфейси са присвоени следните суфикс:

_DeprecatedНапример _Connection интерфейс е актуализиран, както следва:

  • В Windows 7 и по-ранни версии на Windows _Connection IID е 00000550-0000-0010-8000-00AA006D2EA4.

  • В Windows 7 SP1 _Connection IID е 00001550-0000-0010-8000-00AA006D2EA4 и IID за _Connection_Deprecated е 00000550-0000-0010-8000-00AA006D2EA4.

Ако приложението използва началото на свързване към _Connection, новата IID се съхраняват в двоични по време на компилация приложението. Това води до грешка, когато приложението работи на ниво операционна система, защото IID не съществува.

Някои ADO APIs зависят от платформата в ADO 2.7 и по-нови версии. За 64-битовите версии на Windows тези ADO API процес аргументи с помощта на 64-битов данни тип (например LONGLONG тип данни). Приложения, които използват тези API обаче използвате ДЪЛГО тип данни. Следователно получавате съобщение за грешка "Тип несъответствие" при опит за стартиране на макроса.

Решение

За да разрешите този проблем, инсталирайте една от актуализациите, описани в следната статия в базата знания на Microsoft:

2640696 ADO-базирано приложение, което се събира в Windows 7 SP1 или Windows Server 2008 R2 SP1 не се изпълнява по-ранни версии на Windows

Допълнителна информация

По-добро решение за Windows 7 SP1 ADO GUID промени

http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×