2011-03-25 185 views
1

我有一個程序在VB.Net從Outlook接收郵件,提取附件並通過查詢插入附件到表中。我想將查詢/查詢置於Try/Catch塊中,但不能這樣做,因爲Outlook異常無法被捕獲,並且它給了我一個錯誤,除非我提出了一個非常特定的異常,否則我無法捕捉到它。有沒有解決方法?捕獲不能捕獲類型'Microsoft.Office.Interop.Outlook.Exception'

編輯:

Try 

    Catch ex As Exception 

    End Try 

例外是強調,當我懸停在它,它說:「抓賊抓不住型‘Microsoft.Office.Interop.Outlook.Exception’,因爲它不是在' System.Exception「或從」System.Exception「繼承的類。這影響了我想要放入Try/Catch塊的所有其他代碼。該怎麼辦?

+0

是什麼讓你覺得Outlook例外無法被捕獲? – Heinzi 2011-03-25 06:47:22

+0

@Heinzi:請閱讀我編輯的問題。我猜應該可以。 – CodingInCircles 2011-03-25 06:59:00

+1

謝謝,現在很清楚。我添加了另一個答案(並刪除了我的舊答案)。我也冒昧地改變你的問題的標題,以便更準確地總結問題。 – Heinzi 2011-03-25 07:09:19

回答

4

好的,我現在看到了問題。

當您編寫Exception時,VB會讀取Microsoft.Office.Interop.Outlook.Exception(可能是因爲您在代碼文件的頂部有一個Import Microsoft.Office.Interop.Outlook語句)。

你需要告訴VB明確你的意思System.Exception

Try 
    ... 
Catch ex As System.Exception 
    ... 
End Try 

(由於M.O.I.O.Exception不是一個.NET異常,但只是一個Outlook COM類碰巧被稱爲Exception,有好多沒有任何意義在試圖Catch吧。)

+1

真正的問題當然就是爲什麼你首先要捕獲'System.Exception'。你將無法處理大部分從該基類派生的異常,因此捕獲它們幾乎沒有意義。 – 2011-03-25 07:10:10

+0

良好的捕獲,另一個不直接導入Microsoft.Office.Stuff – 2011-03-25 07:14:16

+1

的理由@Cody Gray:我不會處理它們,只是保留它們的日誌。 :) – CodingInCircles 2011-03-25 07:16:56

0

不存在「XXX異常無法捕獲」這樣的事情。它可能有一個你不知道的類型。您應該閱讀您使用的庫的文檔並查找異常的類型。

編輯:要回答這個問題:如果你想捕獲除一個異常之外的所有異常,你應該捕獲所有異常並再次拋出異常。

+0

沒有。解決方案永遠不會無故捕捉和重新拋出異常。找出你想要捕捉的異常,並抓住那個異常。 – 2011-03-25 07:08:44

+0

主題是「如何捕獲除一個之外的所有異常」。因爲這是我的迴應...... – cprogrammer 2011-03-25 08:33:50

+0

所以,你既沒有讀完整個問題,也沒有提供正確的答案。爲了記錄,在VB.NET中,你可以簡單地寫出:'當不是(TypeOf ex是CustomException)時Catch ex As Exception''。正如我之前提到的,捕捉所有異常並重新拋出一個不是任何問題的正確答案,更不用說這個問題。 – 2011-03-25 10:02:12