2010-06-01 18 views
6

mówię do obiektu COM (obiekt Microsoft ADO Recordset). W pewnym przypadku rekordów powróci nieudana (czyli ujemna) HRESULT, z komunikatem:COM: Jak obsługiwać określony wyjątek?

Przedmiot nie można znaleźć w zbiorach odpowiadającą żądanej nazwy lub porządkowej

wiem co ten komunikat o błędzie oznacza, wiedzieć, dlaczego tak się stało, i jak to naprawić. Ale znam te rzeczy, ponieważ przeczytałem wiadomość, która na szczęście była w języku, który rozumiem.

Teraz chciałbym obsłużyć wyjątek specjalnie. Obiekt COM rzucił HRESULT z

0x800A0CC1 

W idealnym świecie Microsoft byłaby udokumentowana what errors can be returned podczas próby dostępu:

records.Fields.Items(index) 

z nieprawidłowym indeksu. Ale oni nie; one najbardziej mówią, że błąd może wystąpić, tj .:

Jeśli Przedmiot nie może znaleźć obiektu w kolekcji odpowiadającego indeksowi argumentu, wystąpi błąd.

Zważywszy, że zwrócony kod błędu nie jest udokumentowana, czy to prawidłowe obsługiwać konkretny kod powrotu `0x800A0CC1' kiedy próbuję pułapkę wyjątek:

pozycja nie może być w zbiorach odpowiadającą żądanej nazwy lub porządkowa

?

Ponieważ firma Microsoft nie udokumentowała kodu błędu, ulegają one zmianie w przyszłości.

Odpowiedz

4

Zrobili dokument ten kod błędu, ale trudno znaleźć: ErrorValueEnum:

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

..so, jak jego udokumentowanym kodem błędu, to jest bezpieczne, aby przetestować na nim wyraźnie.

+0

Dwie identyczne odpowiedzi wspominają, że dokumentacja dotycząca błędów zgłaszanych przez nieruchomość nie jest dokumentowana za pomocą nieruchomości. Ale twoja zostaje zaakceptowana, ponieważ cytowałeś dokumenty i byłeś z nimi związany. Dodatkowo, przy 1k rep zachowujesz zaakceptowane odpowiedzi bardziej niż Hans (Przepraszam Hans, ale to prawda) –

3

Musisz zdecydować, czy jest to warte ryzyka, ale uważam, że jest mało prawdopodobne, że Microsoft zmieni ten kod błędu. Sprawdzanie tego konkretnego kodu błędu jest dość solidnym sposobem postępowania.

+0

Uzgodnione - kiedy Google kod błędu, można znaleźć posty odnoszące się do niego, które pochodzą z 2002 roku na pierwszej stronie wyników, więc to hasn zmieniło się na tak długo. – Paddyslacker

+0

Po przeczytaniu bloga Raymonda Chena przez tak długi czas, jestem doskonale świadomy, jak źle jest polegać na nieudokumentowanym zachowaniu; ogranicza zdolność Microsoft do ulepszania i wprowadzania innowacji. –

1

Tak, jest w porządku. Jest to faktycznie udokumentowany kod błędu, chociaż ich odnalezienie nigdy nie jest łatwe. Jest to zdefiniowane w pliku MSDAo15.idl Windows SDK, adErrItemNotFound (błąd 3265)

Powiązane problemy