Upozornění: Technologie ADO a ADO MD nebyly plně testovány v prostředí Microsoft .NET Framework. Můžou způsobovat občasné problémy, zejména v aplikacích založených na službách nebo ve vícevláknových aplikacích. Techniky popsané v tomto článku by se měly používat jenom jako dočasné opatření během migrace na ADO.NET. Tyto techniky byste měli použít až po úplném otestování, abyste měli jistotu, že nedochází k problémům s kompatibilitou. Všechny problémy, které jsou způsobeny použitím ADO nebo ADO MD tímto způsobem, se nepodporují. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
840667 Při použití rozhraní ADO a ADO MD v aplikaci rozhraní .NET Framework se zobrazí neočekávané chyby
Příznaky
Podívejte se na tento scénář: V počítači se systémem Windows 7 Service Pack 1 (SP1) nebo Windows Server 2008 R2 SP 1 nebo na počítači s nainstalovaným KB9823246 překompilovat aplikaci Microsoft ADO (ActiveX Data Objects) pomocí jedné z následujících aplikací:
- Microsoft Visual C++
- Microsoft jazyk Visual Basic for Application (VBA)
- Microsoft Visual Basic 6
- Aplikace Microsoft .NET
V tomto scénáři zjistíte, že aplikaci nejde spustit v nižších operačních systémech. Například nefunguje v prodejní verzi Windows 7, Windows Vista a dalších dřívějších verzích Windows. V závislosti na provedené implementaci se zobrazí také chybová zpráva podobná následující. (Můžou se zobrazit další chybové zprávy.)
Chybová zpráva 1
Poznámka
REGDB_E_CLASSNOTREG (0x80040154)
Chybová zpráva 2
Poznámka
E_POINTER (0x80004003)
Chybová zpráva 3
Poznámka
E_NOINTERFACE (0x80004002)
Chybová zpráva 4
Poznámka
Objekt COM typu System.__ComObject nejde přetypovat na typ rozhraní ADODB. Spojení". Tato operace se nezdařila, protože volání QueryInterface součásti modelu COM pro rozhraní s IID {00001550-0000-0010-8000-00AA006D2EA4} selhalo kvůli následující chybě: Žádné takové rozhraní není podporováno (Výjimka z HRESULT: 0x80004002 (E_NOINTERFACE))."
Tento problém replikuje následující segment 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
}
Tento problém replikuje následující segment kódu jazyka jazyk Visual Basic for Application.
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
Chyba VBA: Chyba za běhu 430: Třída nepodporuje automatizaci nebo nepodporuje očekávané rozhraní
Poznámka: Microsoft už nepodporuje primární definiční sestavení pro ADO a už nepodporuje Visual Basic 6. Další informace o podpoře jazyka Visual Basic 6 naleznete na následující webové stránce MSDN:
Prohlášení o podpoře pro Visual Basic 6.0 v systémech Windows Vista, Windows Server 2008 a Windows 7 Další informace o primárním definičním sestavení pro podporu rozhraní ADO naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
318559 Použití primárního definičního sestavení pro ADO (ADODB) v Visual Studio .NET
Příčina
K tomuto problému dochází, protože některá rozhraní rozhraní ADO byla v systému Windows 7 SP1 změněna tak, aby byla přidružena k identifikátorům nových instancí (IID). Starším rozhraním IID byla přiřazena následující přípona:
_Deprecated Například rozhraní _Connection bylo aktualizováno takto:
- V systému Windows 7 a dřívějších verzích systému Windows je _Connection IID 00000550-0000-0010-8000-00AA006D2EA4.
- V systému Windows 7 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á brzké vazby na _Connection, nová IID se během kompilace uloží do binárního souboru aplikace. To způsobí chybu, pokud aplikace běží v operačním systému nižší úrovně, protože IID neexistuje.
Některá rozhraní ADO API jsou v ADO 2.7 a novějších verzích závislá na platformě. V 64bitových verzích Windows zpracovávají tato rozhraní ADO API argumenty pomocí 64bitového datového typu (například datového typu LONGLONG). Aplikace, které tato rozhraní API používají, ale stále používají datový typ LONG. Proto se při pokusu o spuštění makra zobrazí chybová zpráva "Neshoda typů".
Řešení
Chcete-li vyřešit tyto potíže, nainstalujte jednu z aktualizací popsaných v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
2640696 Aplikace založená na rozhraní ADO, která je zkompilovaná v systému Windows 7 SP1 nebo v Windows Server 2008 R2 SP1, není spuštěna v dřívějších verzích systému Windows
Další informace
Lepší řešení pro změny identifikátoru GUID ADO systému Windows 7 SP1