2010-06-01 5 views
6

Je parle à un objet COM (objet Microsoft ADO Recordset). Dans un certain cas, le recordset retournera un échec (c.-à-négatif) HRESULT, avec le message:COM: comment gérer une exception spécifique?

article ne se trouve pas dans la collection correspondant au nom demandé ou ordinale

je sais ce que signifie ce message d'erreur, sachez pourquoi c'est arrivé et comment y remédier. Mais je sais ces choses parce que j'ai lu le message, qui était heureusement dans une langue que je comprends.

Maintenant, je voudrais gérer cette exception spécialement. L'objet COM a lancé un HRESULT de

0x800A0CC1 

Dans un monde idéal Microsoft aurait documenté what errors can be returned quand j'essaie d'accéder à:

records.Fields.Items(index) 

avec un index non valide. Mais ils ne le font pas; ils plus qu'ils disent est qu'une erreur peut se produire, i.e. .:

Si article ne peut pas trouver un objet dans la collection correspondant à l'argument Index , une erreur se produit.

Étant donné que le code d'erreur retourné est pas documenté, est-il correct pour gérer un code de retour spécifique de `0x800A0CC1' quand je suis en train de piéger l'exception:

article ne peut pas être trouvé dans la collection correspondant au nom demandé ou ordinale

?

Étant donné que Microsoft n'a pas documenté le code d'erreur, ils techniquement le modifier dans le futur.

Répondre

4

Ils ont permis de documenter ce code d'erreur, mais il est difficile de trouver: ErrorValueEnum:

adErrItemNotFound 3265 -2146825023 0x800A0CC1 Item cannot be found in the collection that corresponds to the requested name or ordinal. 

..so, comme un code d'erreur documenté, il est sûr de tester explicitement.

+0

Deux réponses identiques indiquent que la documentation des erreurs générées par la propriété n'est pas documentée avec la propriété. Mais le vôtre est accepté parce que vous avez cité les documents et que vous y êtes lié. De plus, avec 1k rep vous gardez les réponses acceptées plus que Hans (Désolé Hans, mais c'est vrai) –

3

Vous devrez décider si cela vaut ou non le risque, mais je crois qu'il est peu probable que Microsoft va changer ce code d'erreur. La vérification de ce code d'erreur particulier est une façon assez robuste d'y aller.

+0

Accepté - lorsque vous saisissez le code d'erreur Google, vous pouvez trouver les publications qui s'y rapportent et qui remontent à 2002 sur la première page de résultats. pas changé depuis au moins longtemps. – Paddyslacker

+0

Après avoir lu le blog de Raymond Chen pendant si longtemps, je suis très conscient de la façon dont il est faux de s'appuyer sur un comportement non documenté; cela limite la capacité de Microsoft à s'améliorer et à innover. –

1

Oui, c'est bon. C'est en fait un code d'erreur documenté, bien qu'il ne soit jamais facile de les trouver. Il est défini dans le fichier SDK de Windows msdao15.idl, adErrItemNotFound (erreur 3265)

Questions connexes