я говорю с COM-объектом (объект Microsoft ADO Recordset). В определенном случае recordset возвратит неудавшееся (т.е. отрицательный) HRESULT
, с сообщением:
Объект не может быть найден в наборе, соответствующем требуемому имени или порядковый
я знаю то, что означает это сообщение об ошибке, знайте, почему это произошло, и я, как зафиксировать его. Но я знаю эти вещи, потому что я прочитал сообщение, которое, к счастью, было на языке, который я понимаю.
Теперь я хотел бы обработать это исключение особенно. COM-объект бросил HRESULT
0x800A0CC1
В идеальном мире Microsoft зарегистрировала бы, какие ошибки могут быть возвращены, когда я пытаюсь получить доступ:
records.Fields.Items( index )
с недопустимым индексом. Но они не делают; они, которые большинство, которое они говорят, - то, что ошибка может произойти, т.е.:
Если Объект не может найти объект в наборе, соответствующем Индексному аргументу, ошибка происходит.
Учитывая, что возвращенный код ошибки не документируется, это корректный для обработки определенного кода возврата '0x800A0CC1', когда я пытаюсь захватить исключение:
Объект не может быть найден в наборе, соответствующем требуемому имени или порядковый
?
Так как Microsoft не зарегистрировала код ошибки, они технически изменяют его в будущем.
Они задокументировали этот код ошибки, но его трудно найти: ErrorValueEnum :
adErrItemNotFound 3265 -2146825023 0x800A0CC1 Item cannot be found in the collection that corresponds to the requested name or ordinal.
.. так как это задокументированный код ошибки, его можно безопасно проверить явно.
Вам придется решить, стоит ли рисковать, но я считаю, что вряд ли Microsoft изменит этот код ошибки. Проверка на наличие этого конкретного кода ошибки - довольно надежный способ.
Да, нормально. На самом деле это задокументированный код ошибки, хотя найти их никогда не бывает легко. Он определен в файле SDK Windows msdao15.idl, adErrItemNotFound (ошибка 3265)