如何捕获错误代码中有趣细节的异常?

时间:2010-04-21 13:45:22

标签: .net error-handling

我的数据库连接例程可能会失败,例如,如果提供的凭据不正确。 在这种情况下,抛出一般的 OleDbException ,其ErrorCode为 -2147217843 。 该消息给出了错误,例如

No error message available, result code:
DB_SEC_E_AUTH_FAILED(0x80040E4D)

我怎么抓住这个?使用错误代码-2147217843似乎有点“神奇的数字”。

    Try
        mCon = New OleDbConnection(connectionString)
        mCon.Open()

    Catch ex As OleDbException
        If ex.ErrorCode = -2147217843 Then
            Engine.logger.Fatal("Invalid username and/or password", ex)
            Throw
        End If
    Catch ex As Exception
        Engine.logger.Fatal("Could not connect to the database", ex)
        Throw
    End Try

1 个答案:

答案 0 :(得分:1)

您可以将您感兴趣的错误代码定义为int Enum,可以轻松地转换为Int。我对VB不太熟悉,但可以用C#告诉你(应该很容易转换):

public enum OleDbErrorCodes : int
{
    DB_SEC_E_AUTH_FAILED = -2147217843
}

然后在你的Catch块中你可以将Enum强制转换为类似的int:

catch (System.Data.OleDb.OleDbException ex)
{
    if (ex.ErrorCode == (int)OleDbErrorCodes.DB_SEC_E_AUTH_FAILED)
    {
        // Log exception
    }
}