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.