2010-06-01 10 views
6

estoy hablando con un objeto COM (objeto Recordset Microsoft ADO). En cierto caso, el conjunto de registros devolverá un fallido (es decir, negativo) HRESULT, con el mensaje:COM: ¿Cómo manejar una excepción específica?

Elemento no se encuentra en la colección correspondiente al nombre solicitado o ordinal

sé qué significa este mensaje de error, saber por qué sucedió y cómo solucionarlo. Pero sé estas cosas porque leí el mensaje, que afortunadamente estaba en un idioma que entiendo.

Ahora me gustaría manejar esta excepción especialmente. El objeto COM arrojó un HRESULT de

0x800A0CC1 

En un mundo ideal Microsoft habría documentado what errors can be returned cuando intento de acceso:

records.Fields.Items(index) 

con un índice válido. Pero ellos no; que más se suele decir es que un error se puede producir , es decir .:

Si artículo no puede encontrar un objeto en la colección correspondiente al argumento Índice , se produce un error.

Teniendo en cuenta que el código de error devuelto no está documentado, es que correcta para manejar un código de retorno específico del `0x800A0CC1' cuando estoy tratando de controlar la excepción:

elemento no se puede encontrado en la colección correspondiente al nombre solicitado u ordinal

?

Dado que Microsoft no documentó el código de error, técnicamente lo cambia en el futuro.

Respuesta

4

lo hicieron documento de este código de error, pero es difícil de encontrar: ErrorValueEnum:

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

.so, como su un código de error documentado, es seguro para la prueba de forma explícita.

+0

Dos respuestas idénticas mencionan que la documentación de errores arrojados por la propiedad no está documentada con la propiedad. Pero el suyo es aceptado porque usted citó los documentos y se lo vinculó. Además, con 1k representante, usted mantiene las respuestas aceptadas más que Hans (Lo siento Hans, pero es verdad) –

3

Deberá decidir si vale la pena el riesgo, pero creo que es poco probable que Microsoft cambie este código de error. La comprobación de este código de error en particular es una forma bastante sólida de hacerlo.

+0

De acuerdo: cuando busca el código de error, puede encontrar las publicaciones que se refieren a esa fecha desde 2002 en la primera página de resultados, por lo que no se ha No cambió por al menos tanto tiempo. – Paddyslacker

+0

Después de leer el blog de Raymond Chen durante tanto tiempo, soy muy consciente de lo equivocado que es confiar en el comportamiento indocumentado; limita la capacidad de Microsoft para mejorar e innovar. –

1

Sí, está bien. De hecho, es un código de error documentado, aunque encontrarlos nunca es fácil. Se define en el archivo SDK de Windows msdao15.idl, adErrItemNotFound (error 3265)

Cuestiones relacionadas