Zugriff auf zusätzliche Informationen zu Fehlern, die bei Verwendung der gespeicherten Prozeduren des OLE-Automatisierungssystems zurückgegeben werden


Zusammenfassung


Gespeicherte OLE-Automatisierungs Prozeduren benötigen uneingeschränkten Zugriff auf die Objekte, die Sie aufrufen möchten, um ordnungsgemäß zu funktionieren. Im Allgemeinen werden die folgenden Fehler angezeigt, wenn ungelöste Probleme mit dem Zielobjekt weiterhin bestehen:
Microsoft [ODBC-SQL Server-Treiber] Protokollfehler in TDS-Datenstrom [Microsoft] [ODBC SQL Server Driver] Funktionssequenz Fehler

Weitere Informationen


In diesem Fall kann es zu mehreren zugrunde liegenden Problemen kommen, die gleichzeitig auftreten. In erster Linie handelt es sich bei dem TDS-Fehler (tabellarischer Datenstrom) größtenteils um einen generischen Fehler, und es sei denn, dass Sie sich auch mit einer RDS-Implementierung (Remote Data Service) befassen, wird dies kein sehr klarer Zeiger auf die Quelle des Problems sein. Um die zurückgegebenen Fehlerinformationen zu verbessern, müssen Sie den sp_OAGetErrorInfo-Aufruf durch einen Aufruf von sp_displayoaerrorinfo ersetzen. Um auf diese zusätzlichen Informationen zugreifen zu können, müssen Sie zunächst die beiden Recht praktischen gespeicherten Prozeduren kompilieren, die im folgenden Artikel der SQL Server 7,0-Online Dokumentation erwähnt sind:
   OLE Automation Return Codes and Error Information 
Im Artikel wird auch ausführlich erläutert, warum diese gespeicherten Prozeduren benötigt werden, um zusätzliche verwendbare Informationen zu extrahieren, die in diesem Artikel nicht behandelt werden. Wenn Sie die gespeicherten Prozeduren kompiliert haben, erhalten die vorherigen Fehler viel mehr verwendbare Informationen, wie im folgenden Codeausschnitt gezeigt wird, der die geänderte Fehlerbehandlung verwendet, um uns eine weitaus interessantere Ausgabe zu liefern:
DECLARE @object intDECLARE @hr intEXEC @hr = sp_OACreate 'Nic.cls', @object OUTPUTIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--  EXEC sp_OAGetErrorInfo @object    RETURNEND
Was wir mit dem in dieser Instanz aktivierten sp_displayoaerrorinfo-Anruf erhalten, sieht wie folgt aus:
OLE-Automatisierungsfehler Informationen HRESULT: 0x800401f3 Quellcode: ODSOLE-Extended Procedure Description: Ungültige Klassen Zeichenfolge
In diesem Beispiel wird festgestellt, dass der Fehler "Ungültige Klassen Zeichenfolge" darauf hinweist, dass die ProgID oder CLSID (NIC. CLS im vorherigen Beispiel), die im sp_OACreate-Aufruf angegeben wurde, nicht erfolgreich als OLE-Objekt auf dem SQL Server registriert wurde. In unserem Beispiel ist dies in der Tat der Fall, weil NIC. CLS ein fiktives Objekt ist. Weitere Informationen zu diesen Arten von Fehlern finden Sie in der Dokumentation zum sp_oaGetErrorInfo Aufruf in SQL Server Books Online.in, um ein wenig mehr von dem zu sehen, was hier vor sich geht, fügen Sie "Select @HR" zwischen der if-und der BEGIN-Anweisung im Code wie folgt hinzu:
DECLARE @oFTP intDECLARE @hr int  DECLARE @vvar varchar(255)DECLARE @vout intEXEC @hr = sp_OACreate 'Nic.Inet', @object OUTPUTSELECT @hrIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--   EXEC sp_OAGetErrorInfo @object    RETURNEND
Dadurch werden die folgenden Fehlerinformationen wie zuvor aktiviert zurückgegeben:
------------2147221005(1 row(s) affected) 
OLE-Automatisierungsfehler Informationen HRESULT: 0x800401f3 Quellcode: ODSOLE-Extended Procedure Description: Ungültige Klassen Zeichenfolge
Es ist zu beachten, dass es verlockend sein kann, dem Exec-sp_OAGetErrorInfo @Object-Aufruf einfach eine @HR hinzuzufügen, die, wenn Sie versucht wird, in der Tat einen falschen Erfolg in einem Ergebnis des Befehls "erfolgreich abgeschlossen" zurückgibt. Dies ist aber eigentlich nicht das, was wir wollen, denn wir müssen wissen, warum wir ein Ergebnis ungleich NULL für @HR im Code erhalten.Hinweis Wenn Sie Microsoft SQL Server 2005 verwenden, müssen Sie möglicherweise diesen Code leicht ändern. Weitere Informationen finden Sie im Thema "Rückgabecodes und Fehlerinformationen zur OLE-Automatisierung" in der SQL Server 2005-Online Dokumentation.