.net - 在错误代码中有趣的细节处,如何捕获异常?

标签 .net error-handling

我的数据库连接例程可能会失败,例如,如果提供的凭据不正确。
在这种情况下,将抛出常规 OleDbException ,错误代码为 -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

最佳答案

您可以将您感兴趣的错误代码定义为int枚举,可以轻松地转换为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
    }
}

关于.net - 在错误代码中有趣的细节处,如何捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683424/

相关文章:

error-handling - 如何对弹出窗口和其他特殊页面使用不同的Wicket到期/错误页面?

c# - 从C#WinForms错误消息中提取特定信息

.net - ServiceStack认证失败时,不重定向?

Python Logging - 创建一个日志文件,列出在 For 循环中引发错误的文件

c# - 使用 C# 为独立应用程序进行 Google 或 Bing map 编程

c# - 使用 SSH.NET 查找具有特定文件名的最新 SFTP 文件

python - 处理除一个异常外的所有异常

error-handling - 如何隐藏猫的错误?

c# - 如何用 Mono 引用这些包以便编译

c# - 单实例窗口 WPF 不工作