Upozornění: ADO a ADO MD nebyly plně testovány v prostředí Microsoft rozhraní.NET Framework. Zejména aplikací založených na službě nebo ve víceprocesových aplikacích by mohly způsobit k občasným problémům. Techniky, které jsou zmíněny v tomto článku lze používat pouze jako dočasné opatření během přenesení ADO.NET. Tyto postupy měli použít pouze po provedení akce úplné testování a ujistěte se, že neexistují žádné problémy s kompatibilitou. Všechny problémy, které jsou způsobeny pomocí ADO nebo ADO MD tímto způsobem nejsou podporovány. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

840667 obdržíte neočekávané chyby při použití objektů ADO a ADO MD v aplikaci rozhraní.NET Framework

Příznaky

Zvažte následující scénář. V počítačích se systémem Windows 7 Service Pack 1 (SP1) nebo Windows Server 2008 R2 SP1 nebo že KB9823246 instalaci aplikace Microsoft ActiveX Data Objects (ADO) překompilovat pomocí jedné z následujících aplikací:

  • Microsoft Visual C++

  • Microsoft Visual Basic for Applications (VBA)

  • Microsoft Visual Basic 6

  • Aplikace Microsoft .NET

V tomto scénáři zjistíte, že aplikaci nelze spustit v operačních systémech nižší úrovně. Například jej nelze spustit na verzi RTM systému Windows 7, Windows Vista a dřívějších verzí systému Windows. V závislosti na implementaci také se zobrazí chybová zpráva podobná některé z následujících akcí. (Můžete obdržet další chybové zprávy.)

Chybová zpráva 1

REGDB_E_CLASSNOTREG (0x80040154)

Chybová zpráva 2

E_POINTER (0x80004003)

Chybová zpráva 3

E_NOINTERFACE (0x80004002)

Chybová zpráva 4

Nelze cast COM objekt typu "System.__ComObject" na typ rozhraní ' ADODB. Připojení ". Tato operace se nezdařila, protože volání funkce QueryInterface komponenty modelu COM pro rozhraní s identifikátorem IID {00001550-0000-0010-8000-00AA006D2EA4} se nezdařilo kvůli následující chybě: Neznámé rozhraní (Výjimka-HRESULT: 0x80004002 (E_NOINTERFACE)). "

Tento problém je replikována následujícího segmentu kódu 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
}

Následující Visual Basic pro segment kódu aplikace se replikuje tento problém.

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

k chybě jazyka VBA: Chyba spuštění "430": Třída nepodporuje automatizaci nebo nepodporuje očekávané rozhraní

Poznámka: Společnost Microsoft již podporuje primární sestavení interop pro objekty ADO a nadále podporuje Visual Basic 6. Další informace o aplikaci Visual Basic 6 supportability naleznete na následující webové stránce MSDN:

Podpora příkazu jazyka Visual Basic 6.0 v systému Windows Vista, Windows Server 2008 a Windows 7Další informace o primární sestavení interop pro ADO supportability klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

318559 pomocí primární sestavení interop pro ADO (ADODB) v aplikaci Visual Studio .NET

Příčina

K tomuto problému dochází, protože v systému Windows 7 SP1 Chcete-li přidružit novou instanci identifikátory (IID) byly změněny některé rozhraní ADO. Starší rozhraní IID byly přiřazeny následující přípony:

_DeprecatedNapříklad rozhraní _Connection byl aktualizován takto:

  • V systému Windows 7 a v dřívějších verzích systému Windows je _Connection IID 00000550-0000-0010-8000-00AA006D2EA4.

  • V systému Windows 7 s aktualizací SP1 je _Connection IID 00001550-0000-0010-8000-00AA006D2EA4 a IID pro _Connection_Deprecated je 00000550-0000-0010-8000-00AA006D2EA4.

Pokud vaše aplikace používá časné vazby na _Connection, nové IID jsou uloženy v binárním během kompilace aplikace. To způsobuje chybu při spuštění aplikace v operačním systému nižší úrovně, protože IID neexistuje.

Některá rozhraní API ADO jsou závislé na platformě v objektech ADO 2.7 nebo novější. V 64bitových verzích systému Windows zpracování těchto rozhraní API ADO argumenty pomocí 64bitové datový typ (například typ dat LONGLONG ). Aplikace používající tato rozhraní API však použít typ dat LONG . Proto obdržíte chybovou zprávu "Neshoda typu" při pokusu o spuštění makra.

Řešení

Chcete-li tento problém vyřešit, nainstalujte některou z aktualizací popsanou v následujícím článku znalostní báze Microsoft Knowledge Base:

2640696 aplikace založené na objekt ADO, který je kompilován v systému Windows 7 SP1 nebo Windows Server 2008 R2 SP1 nespustí v dřívějších verzích systému Windows

Další informace

Lepší řešení pro Windows 7 SP1 ADO GUID změny

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

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti

Projít školení >

Získejte nové funkce jako první

Připojit se k programu Microsoft Insider >

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

Děkujeme vám za zpětnou vazbu.

×