2010-06-01 26 views
6

Tôi đang nói chuyện với một đối tượng COM (đối tượng Microsoft ADO Recordset). Trong một trường hợp nhất định recordset sẽ trả về một thất bại (tức là tiêu cực) HRESULT, với thông điệp:COM: Làm thế nào để xử lý một ngoại lệ cụ thể?

mục không thể được tìm thấy trong bộ sưu tập tương ứng với tên yêu cầu hoặc thứ

tôi biết thông báo lỗi này có nghĩa là gì, biết tại sao nó xảy ra và tôi cách khắc phục nó. Nhưng tôi biết những điều này bởi vì tôi đọc tin nhắn, mà may mắn thay là trong một ngôn ngữ tôi hiểu.

Bây giờ tôi muốn xử lý ngoại lệ này đặc biệt. Các đối tượng COM ném một HRESULT của

0x800A0CC1 

Trong một thế giới lý tưởng Microsoft sẽ đã ghi nhận what errors can be returned khi tôi cố gắng để truy cập:

records.Fields.Items(index) 

với một chỉ số không hợp lệ. Nhưng họ không; họ nhất mà họ nói là một lỗi thể xảy ra, tức là .:

Nếu mục không thể tìm thấy một đối tượng trong các bộ sưu tập tương ứng với đối số Index , một lỗi xảy ra.

Cho rằng mã lỗi trả lại không ghi nhận, là nó đúng để xử lý một mã trở lại cụ thể của `0x800A0CC1' khi tôi đang cố gắng để bẫy các ngoại lệ:

mục không thể được tìm thấy trong bộ sưu tập tương ứng với tên được yêu cầu hoặc thứ tự

?

Vì Microsoft không ghi lại mã lỗi, chúng kỹ thuật thay đổi trong tương lai.

Trả lời

4

Họ đã làm tài liệu mã lỗi này, nhưng thật khó để tìm thấy: ErrorValueEnum:

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

..so, như một mã lỗi tài liệu của nó, nó là an toàn để kiểm tra nó một cách rõ ràng.

+0

Hai câu trả lời giống nhau đề cập rằng tài liệu về các lỗi do thuộc tính tạo ra không được ghi lại bằng tài sản. Nhưng bạn nhận được chấp nhận bởi vì bạn trích dẫn các tài liệu, và liên kết với nó. Ngoài ra, với đại diện 1k, bạn giữ các câu trả lời được chấp nhận nhiều hơn Hans (Xin lỗi Hans, nhưng đó là sự thật) –

3

Bạn sẽ phải quyết định xem liệu nó có đáng để mạo hiểm hay không, nhưng tôi tin rằng Microsoft sẽ không thay đổi mã lỗi này. Kiểm tra mã lỗi cụ thể này là một cách khá mạnh mẽ để đi.

+0

Đồng ý - khi bạn Google mã lỗi, bạn có thể tìm thấy các bài viết đề cập đến nó có từ năm 2002 trên trang kết quả đầu tiên, vì vậy nó có Không được thay đổi trong ít nhất là lâu. – Paddyslacker

+0

Sau khi đọc blog của Raymond Chen quá lâu, tôi nhận thức sâu sắc về sự sai lầm của việc dựa vào hành vi không có giấy tờ; nó hạn chế khả năng của Microsoft để cải thiện và đổi mới. –

1

Có, không sao. Đó là trong thực tế, một mã lỗi tài liệu, mặc dù việc tìm kiếm chúng không bao giờ dễ dàng. Nó được định nghĩa trong tệp msdao15.idl Windows SDK, adErrItemNotFound (lỗi 3265)