ADO/SQL Server: qu'est-Ce que le code d'erreur pour le “délai d'attente expiré”?

je suis en train d'essayer de piéger un "délai d'attente expiré erreur" d'ADO.

Lorsqu'un délai d'attente se produit, ADO retourne:

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

La NativeError de zéro logique, car le délai d'attente n'est pas une fonction du moteur de base de données (c'est à dire de SQL Server), mais d'ADO interne du mécanisme d'expiration.


La Number (c'est à dire le hresult COM) paraît utile, mais le définition de DB_E_ABORTLIMITREACHED dans oledberr.h dit:

Exécution s'est arrêtée en raison d'un plafond de ressources a été atteint. Aucun résultat n'a été renvoyé.

Cette erreur pourrait s'appliquer à d'autres choses que les "délai d'attente expiré" (certains potentiellement côté serveur), comme un gouverneur qui limite:

  • Utilisation de l'UC
  • I/O des lectures/écritures
  • la bande passante du réseau

et s'arrête une requête.


La dernière pièce utile est SQLState, qui est une base de données indépendante de code d'erreur système. Malheureusement, la seule de référence pour les codes d'erreur SQLState je peux trouver ont pas fait mention de HYT00.

Quoi faire?
Que dois-faire?


Remarque: je ne peux pas faire confiance

0x80040E31 (DB_E_ABORTLIMITREACHED)

pour dire "délai d'attente expiré", pas plus que je pouvais avoir confiance

0x80004005 (E_UNSPECIFIED_ERROR)

pour dire "Opération a été bloquée sur les ressources par un autre processus et a été choisie comme victime du blocage".


Mon pseudo-question devient: est-ce que quelqu'un a de la documentation sur ce que le SQLState "HYT000"?

Et ma vraie question demeure: Comment puis-je précisément de piéger un ADO délai d'attente expiré exception levée par ADO?

Dois aimer les questions où le développeur est d'essayer de "faire la bonne chose", mais personne ne sait comment de faire la bonne chose. Aussi dois aimer comment googler pour DB_E_ABORTLIMITREACHED et cette question est d' #9, avec MSDN nulle part pour être trouvée.

Mise à jour 3

De la OLEdb ICommand.Exécuter référence:

DB_E_ABORTLIMITREACHED

L'exécution a été annulée en raison d'un plafond de ressources a été atteint. Par exemple, une requête a expiré. Aucun résultat n'a été renvoyé.

"Par exemple", ce qui signifie pas d'une liste exhaustive.


Mise À Jour De Trois

Trouvé. Réponse appliquée comme réponse.

Merci de mettre l'effort dans votre question, y compris les liens vers toutes les informations de référence. Il est utile à d'autres personnes lorsque vous faites des recherches similaires.

OriginalL'auteur Ian Boyd | 2010-06-04