6 Stimmen

ADO/SQL-Server: Was ist der Fehlercode für "timeout expired"?

Ich versuche, einen "Timeout expired"-Fehler von ADO abzufangen.

Wenn eine Zeitüberschreitung auftritt, kehrt ADO zurück:

Number:      0x80040E31 (DB_E_ABORTLIMITREACHED in oledberr.h)
SQLState:    HYT00
NativeError: 0

があります。 NativeError von Null ist sinnvoll, da die Zeitüberschreitung nicht von der Datenbank-Engine (d.h. SQL Server) abhängt, sondern vom ADO-internen Zeitüberschreitungsmechanismus.


があります。 Number (d.h. das COM hresult) sieht nützlich aus, aber die Definition von DB_E_ABORTLIMITREACHED en oledberr.h sagt:

Die Ausführung wurde gestoppt, weil ein Ressourcenlimit erreicht wurde. Es wurden keine Ergebnisse zurückgegeben.

Dieser Fehler kann auch andere Dinge betreffen als " Zeitüberschreitung abgelaufen " (einige davon möglicherweise serverseitig), wie z.B. ein Gouverneur, der Grenzen setzt:

  • CPU-Last
  • E/A-Lese-/Schreibvorgänge
  • Netzwerk-Bandbreite

und stoppt eine Abfrage.


Der letzte nützliche Teil ist SQLState das ein datenbankunabhängiges Fehlercodesystem ist. Leider ist das einzige Referenz für SQLState-Fehlercodes, die ich finden kann haben keine Erwähnung von HYT00 .

Was ist zu tun? Was tun?


Note : ich kann nicht vertrauen

0x80040E31 (DB_E_ABORTLIMITREACHED)

zu bedeuten " Zeitüberschreitung abgelaufen ", mehr als ich vertrauen könnte

0x80004005 (E_UNSPECIFIED_ERROR)

zu bedeuten " Die Transaktion war mit einem anderen Prozess in einer Sackgasse, was die Sperrressourcen angeht, und wurde als Opfer der Sackgasse ausgewählt ".


Meine Pseudo-Frage wird: hat jemand Dokumentation darüber, was der SQLState " HYT000 " bedeutet?

Und meine eigentliche Frage bleibt bestehen: Wie kann ich speziell eine ADO-Falle Zeitüberschreitung abgelaufen Ausnahme, die von ADO?

Man muss die Fragen lieben, bei denen der Entwickler versucht, " das Richtige tun ", aber niemand weiß wie um das Richtige zu tun. Ich finde es auch toll, dass das Googeln nach DB_E_ABORTLIMITREACHED und diese Frage ist #9, wobei MSDN nirgends zu finden ist.

Aktualisierung 3

Von der OLEdb ICommand.Execute-Referenz :

DB_E_ABORTLIMIT-ERREICHT

Die Ausführung wurde abgebrochen, weil ein Ressourcenlimit erreicht wurde. Zum Beispiel, eine Abfrage hat eine Zeitüberschreitung. Es wurden keine Ergebnisse zurückgegeben.

" Zum Beispiel ", d.h. eine nicht erschöpfende Liste.


Update Drei

Ich habe es gefunden. Antwort wird als Antwort übernommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X