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

COM:如何处理特定的异常?,com,exception-handling,ado,Com,Exception Handling,Ado,我正在与COM对象(Microsoft ADO记录集对象)对话。在特定情况下,记录集将返回失败(即负)HRESULT,并显示以下消息: 在集合中找不到项 对应于请求的名称或名称 序数的 我知道这个错误消息的意思,知道它发生的原因,我知道如何修复它。但我知道这些事情是因为我读了这封信,幸运的是它是用我能听懂的语言写的 现在我想专门处理这个异常。COM对象抛出的HRESULT为 0x800A0CC1 在理想情况下,当我尝试访问时,Microsoft会记录: records.Fields.Items

我正在与COM对象(Microsoft ADO记录集对象)对话。在特定情况下,记录集将返回失败(即负)
HRESULT
,并显示以下消息:

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

我知道这个错误消息的意思,知道它发生的原因,我知道如何修复它。但我知道这些事情是因为我读了这封信,幸运的是它是用我能听懂的语言写的

现在我想专门处理这个异常。COM对象抛出的HRESULT为

0x800A0CC1
在理想情况下,当我尝试访问时,Microsoft会记录:

records.Fields.Items( index )
索引无效。但事实并非如此;他们最常说的是可能发生错误,即:

如果在中找不到对象 与索引对应的集合 参数,则会发生错误

如果没有记录返回的错误代码,那么在尝试捕获异常时处理特定返回代码“0x800A0CC1”是否正确:

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

?


因为微软没有记录错误代码,所以他们将来会在技术上对其进行更改。

你必须决定是否值得冒险,但我相信微软不太可能更改此错误代码。检查此特定错误代码是一种非常有效的方法。

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


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

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

同意-当你搜索错误代码时,你可以在第一个结果页面上找到指向它的帖子,这些帖子可以追溯到2002年,所以它至少没有改变那么久。在阅读了Raymond Chen的博客这么久之后,我敏锐地意识到依靠无文件记录的行为是多么错误;这限制了Microsoft改进和创新的能力。两个相同的答案提到,属性引发的错误的文档没有与属性一起记录。但是你的文档会被接受,因为你引用了文档并链接到它。另外,有了1k rep,您比Hans保留了更多被接受的答案(抱歉,Hans,这是真的)
adErrItemNotFound    3265 -2146825023 0x800A0CC1    Item cannot be found in the collection that corresponds to the requested name or ordinal.