2012-02-23 18 views
4

我正在與一些數據庫和捕捉異常來檢查各種條件。我不能簡單地趕上sqlException,因爲它可能意味着很多東西,並且通常使用是否有異常錯誤類值的列表以及它們的含義?特別是sqlexception

catch (SqlException e) 
     { 
      if (e.Errors[0].Class == 14) 
      { 
       return 0; 
      } 
      else ........ 

要檢查特定情況。在這個例子中,14級(至少據我所知)表示一個重複的條目。一個不同的類意味着服務器找不到,或拒絕連接或登錄錯誤等。有誰知道這些錯誤類的列表可以找到?谷歌搜索這是很困難的,因爲任何有「類」的內容都變得明顯。

回答

3

SqlError類的Class屬性實際上表示錯誤的嚴重性。對於錯誤類型,請查看Number屬性。您也可以使用Message屬性來獲取描述錯誤的字符串。您可以找到服務器錯誤消息列表here

+0

我想避免檢查消息字符串本身。我曾被告知這是非常糟糕的形式,因爲你必須檢查整個字符串的平等。看起來數字可能是我需要的,我需要通讀該msdn頁面,謝謝! – cost 2012-02-23 01:19:46

+1

是的,使用'Number'作爲該決定。當它是你不期待的錯誤時(可以在內部記錄,但不會將消息呈現給用戶),可以使用「消息」。 – 2012-02-23 01:22:36

+0

是的,現在,所有意外的異常都寫入調試日誌 – cost 2012-02-23 01:49:44

5

的14嚴重性可能意味着很多東西:

SELECT message_id, [text] 
FROM sys.messages 
WHERE language_id = 1033 
AND severity = 14; 

要查看完整列表:

SELECT message_id, severity, [text] 
FROM sys.messages 
WHERE language_id = 1033 
AND severity > 0 
ORDER BY severity; 

我懷疑你更感興趣的不是嚴重性列MESSAGE_ID列,因爲這是一個更具體一點。

相關問題