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