2009-07-18 69 views
2

有時在應用程序中,可能會比較異常的消息文本。例如,如果異常情況:比較消息屬性知道它意味着什麼?

ex.Message.Contains("String or binary data would be truncated") 

然後MessageBox將顯示給用戶。

這適用於在英文Windows系統上進行測試。但是,如果程序在使用不同語言設置的系統上運行,那麼這將不起作用。如何確保只使用英語異常消息?

回答

6

由於orsogufo指出,您應該檢查異常類型或錯誤代碼,並且絕不會嘗試解析異常消息(消息是針對用戶的,而不是針對程序的)。

在你的具體的例子,你可以不喜歡

try { 
    ... 
} 
catch (SqlException ex) 
{ 
    if (ex.Number == 8152) MessageBox.Show(ex.Message); 
} 

(你必須要確定確切的錯誤號碼來檢查。)

+0

目前我的號碼是8152,207和2627 – Jeffrey 2009-07-18 12:46:43

7

您不能確保例外信息是英文的;它取決於您的控制背後的系統設置。

一般情況下,你不應該如果存在解析異常信息,而是依賴於例外類型和,錯誤代碼(這是語言無關)。

作爲一個例子,而不是捕捉只有一個例外類型和解析消息...

try { 
    do_something(); 
} catch (Exception exc) { 
    if (exc.Message.Contains("String or binary data would be truncated"){ 
     MessageBox.Show("An error occurred..."); 
    } 
} 

...你可能使用多個異常處理程序:

try { 
    do_something(); 
} catch (SqlException sql) { 
    MessageBox.Show("An error occurred..."); 
} catch (SomeOtherException someExc){ 
    // exception-specific code here... 
} catch (Exception exc) { 
    // most generic error... 
} 
3

決不解析的消息旨在供人類閱讀。如果

他們得到了錯誤的語法和下一個版本,他們改變它

如果他們得到了語法錯了,下一個版本,他們改變它。

如果他們的語法錯了,下一次發佈他們改變它會怎麼樣?

+0

這是一個很好的觀點;) – Jeffrey 2009-07-18 15:57:58

相關問題