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