2010-04-21 72 views
3

例如,如果提供不正確的證書,我的數據庫連接例程可能會失敗。 在這種情況下,將拋出一個通用的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

您可以將您感興趣的錯誤代碼定義爲一個int Enum,它可以輕鬆地轉換爲Int。我不是太熟悉VB,但可以告訴你在C#中(應該很容易轉換):

public enum OleDbErrorCodes : int 
{ 
    DB_SEC_E_AUTH_FAILED = -2147217843 
} 

然後在你的Catch塊,你可以投枚舉返回一個int,像這樣:

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

當然,因爲錯誤值是用十六進制定義的,所以你可以使用十六進制爲你的枚舉(0x80040E4D爲C#,&H80040E4D爲VB) – AAT 2010-04-21 14:11:09

+0

是的,好點。 – 2010-04-21 14:32:46

相關問題