2010-06-01 76 views
6

我正在談論COM對象(Microsoft ADO Recordset對象)。在某些情況下,記錄將返回失敗(即負)HRESULT,與消息:COM:如何處理特定的異常?

產品無法對應於請求的名稱或 序

我知道集合 中找到這個錯誤消息意味着什麼,知道它爲什麼發生,我如何解決它。但我知道這些事情是因爲我閱讀了這條消息,幸運的是,我用一種我懂得的語言。

現在我想特意處理這個異常。 COM對象扔的

0x800A0CC1 

的HRESULT在一個理想的世界中,微軟將有記載what errors can be returned當我嘗試訪問:

records.Fields.Items(index) 

具有無效索引。但他們沒有;他們說,他們最重要的是,一個錯誤可能發生,即:

如果項目找不到對應的指數 參數的 集合中的對象,就會出現錯誤。

由於返回的錯誤代碼是沒有記錄,是它正確處理的`0x800A0CC1' 一個特定的返回碼當我試圖捕獲異常:

項目不能集合 對應於請求的名稱或 序

中發現了什麼?

由於微軟沒有記錄錯誤代碼,他們技術上將來改變它。

回答

4

他們做文檔此錯誤代碼,但它是很難找到: ErrorValueEnum

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

..所以,作爲其一個記錄錯誤代碼,它是安全的,明確地測試它。

+0

兩個相同的答案提到屬性拋出的錯誤文檔沒有記錄在屬性中。但是你的文章被接受了,因爲你引用了文檔並與之相關聯。此外,與1k代表你保持接受的答案比漢斯(對不起漢斯,但它是真實的) – 2010-06-01 18:58:13

3

您必須決定是否值得冒險,但我認爲微軟不太可能更改此錯誤代碼。檢查這個特定的錯誤代碼是一個非常強大的方法。

+0

同意 - 當你谷歌的錯誤代碼,你可以找到引用它的帖子,可以追溯到2002年的第一個結果頁面,所以它沒有至少改變了那麼久。 – Paddyslacker 2010-06-01 17:58:07

+0

在閱讀Raymond Chen的博客很久以後,我很清楚依賴無證行爲是多麼錯誤;它限制了微軟改進和創新的能力。 – 2010-06-02 13:47:28

1

是的,沒關係。它實際上是一個記錄錯誤代碼,儘管找到它們從來都不容易。它在msdao15.idl Windows SDK文件中定義,adErrItemNotFound(錯誤3265)