【问题标题】:COM: How to handle a specific exception?COM:如何处理特定的异常?
【发布时间】:2010-06-01 17:42:14
【问题描述】:

我正在与一个 COM 对象(Microsoft ADO Recordset 对象)交谈。在某些情况下,记录集将返回失败(即否定)HRESULT,并带有以下消息:

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

我知道此错误消息的含义,知道它发生的原因,以及我如何解决它。但我知道这些事情,因为我读到了信息,幸运的是,它是用我理解的语言编写的。

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

0x800A0CC1

在理想情况下,当我尝试访问时,Microsoft 会记录 what errors can be returned

records.Fields.Items( index )

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

如果 Item 在 与Index对应的collection 参数,发生错误。

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

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

?

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

【问题讨论】:

    标签: com exception-handling ado


    【解决方案1】:

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

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

    ..so,作为一个记录在案的错误代码,明确地测试它是安全的。

    【讨论】:

    • 两个相同的答案提到该属性引发的错误的文档未与该属性一起记录。但是你的得到了接受,因为你引用了文档并链接到它。另外,1k 代表你比汉斯更能保留接受的答案(对不起汉斯,但这是真的)
    【解决方案2】:

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

    【讨论】:

    • 同意 - 当您在 Google 上搜索错误代码时,您可以在第一个结果页面上找到可追溯到 2002 年的帖子,因此它至少在很长一段时间内都没有改变。
    • 在阅读了Raymond Chen 的博客这么久之后,我敏锐地意识到依赖无证行为是多么错误;它限制了微软改进和创新的能力。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多