2010-06-01 11 views
6

sto parlando con un oggetto COM (oggetto Recordset Microsoft ADO). In un certo caso il recordset restituirà un fallito (cioè negativo) HRESULT, con il messaggio:COM: come gestire un'eccezione specifica?

voce non può essere trovato nella collezione corrispondente al nome richiesto o ordinale

so cosa significa questo messaggio di errore, sapere perché è successo, e io come risolverlo. Ma io conosco queste cose perché ho letto il messaggio, che fortunatamente era in una lingua che ho capito.

Ora mi piacerebbe gestire questa eccezione in particolare. L'oggetto COM ha gettato un HRESULT di

0x800A0CC1 

In un mondo ideale Microsoft avrebbe documentato what errors can be returned quando provo ad accedere:

records.Fields.Items(index) 

con un indice non valido. Ma loro non lo fanno; che la maggior parte si dice è che un errore si può verificare , cioè .:

Se Articolo non riesce a trovare un oggetto nella collezione corrispondente all'argomento Index , si verifica un errore.

Dato che il codice di errore restituito non è documentata, è corretto per gestire un codice di ritorno specifico di `0x800A0CC1' quando sto cercando di intrappolare l'eccezione:

voce non può essere trovato nella collezione corrispondente al nome richiesto o ordinale

?

Poiché Microsoft non ha documentato il codice di errore, sono tecnicamente modificarlo in futuro.

risposta

4

hanno fatto documento questo codice di errore, ma è difficile da trovare: ErrorValueEnum:

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

..quindi, come il suo un codice di errore documentato, è sicuro per verificare in modo esplicito.

+0

Due risposte identiche indicano che la documentazione relativa agli errori lanciati dalla proprietà non è documentata con la proprietà. Ma la tua viene accettata perché hai citato i documenti e collegato ad essa. Inoltre, con 1k rep tieni le risposte accettate più di Hans (scusa Hans, ma è vero) –

3

Dovrai decidere se valga o meno il rischio, ma credo che sia improbabile che Microsoft cambi questo codice di errore. Il controllo di questo particolare codice di errore è un modo abbastanza robusto per andare.

+0

concordato: quando si visualizza il codice di errore di Google, è possibile trovare i post a esso riferiti che risalgono al 2002 sulla prima pagina dei risultati, quindi non ha 'cambiato per almeno così a lungo. – Paddyslacker

+0

Dopo aver letto il blog di Raymond Chen per così tanto tempo, sono profondamente consapevole di quanto sia sbagliato fare affidamento su comportamenti non documentati; limita la capacità di Microsoft di migliorare e innovare. –

1

Sì, va bene. È in effetti un codice di errore documentato, sebbene trovarli non sia mai facile. È definito nel file msdao15.idl di Windows SDK, adErrItemNotFound (errore 3265)