COM:如何处理特定的异常?

时间:2010-06-01 17:42:14

标签: com exception-handling ado

我正在与COM对象(Microsoft ADO Recordset对象)进行通信。在某种情况下,记录集将返回失败的(即否定的)HRESULT,并带有消息:

  

在集合中找不到项目   对应于所请求的名称或   序

我知道这个错误消息的含义,知道它为什么会发生,以及我如何修复它。但我知道这些事情,因为我读了这条消息,幸运的是,这是我理解的一种语言。

现在我想特别处理这个例外。 COM对象抛出了HRESULT

0x800A0CC1

在理想的世界中,当我尝试访问时,Microsoft会记录what errors can be returned

records.Fields.Items( index )

索引无效。但他们没有;他们最常说的是可以发生错误,即:

  

如果项目无法在中找到对象   对应于索引的集合   参数,发生错误。

鉴于没有记录返回的错误代码,当我试图捕获异常时,是否正确处理特定的返回代码“0x800A0CC1”:

  

在集合中找不到项目   对应于所请求的名称或   序

由于Microsoft没有记录错误代码,因此他们技术上将来会更改错误代码。

3 个答案:

答案 0 :(得分:4)

他们确实记录了此错误代码,但很难找到: ErrorValueEnum

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

..所以,由于它是一个记录错误的代码,因此明确地测试它是安全的。

答案 1 :(得分:3)

您必须决定是否值得承担风险,但我相信Microsoft不太可能更改此错误代码。检查这个特定的错误代码是一个非常强大的方法。

答案 2 :(得分:1)

是的,没关系。它实际上是一个记录在案的错误代码,尽管找到它们并不容易。它在msdao15.idl Windows SDK文件中定义,adErrItemNotFound(错误3265)