2010-06-09 66 views
0

我想在執行錯誤查詢時從SQL Server獲取消息編號和嚴重級別信息。SQL Server 2005是否將錯誤消息編號傳遞迴asp.net應用程序?

例如,當用戶試圖刪除被另一條記錄引用的行,並且級聯關係爲「無動作」時,我希望應用程序能夠檢查錯誤消息547(「DELETE語句與REFERENCE約束衝突......「)並向用戶返回一個用戶友好且本地化的消息。

當直接SQL Server上運行這樣的查詢,被印刷在以下消息:

Msg 547, Level 16, State 0, Line 1 
<Error message...> 

在一個Asp.Net應用程序是可用的此信息在事件處理程序的參數或其他地方?

此外,我不認爲有人知道我在哪裏可以找到SQL Server消息號碼的權威性參考?

+0

我應該處理這樣的錯誤,好的做法呢?我不應該捕獲存儲過程中的錯誤並回滾事務嗎?我能做到這一點,但仍然將錯誤傳遞給客戶? – Matt 2010-06-09 17:49:35

回答

5

當然 - 檢查出被拋出的是不順心的事SQL Server上的SqlException

它包含SqlError元素,其中包含了一堆的屬性,包括

  • Class獲取錯誤的嚴重級別從SQL Server返回的集合。
  • LineNumber獲取包含該錯誤的Transact-SQL命令批處理或存儲過程中的行號。
  • Message獲取描述錯誤的文本。
  • Number獲取一個標識錯誤類型的數字。
  • Procedure獲取生成錯誤的存儲過程或遠程過程調用(RPC)的名稱。
  • Server獲取生成錯誤的SQL Server實例的名稱。
  • Source獲取生成錯誤的提供者的名稱。
  • State從SQL Server獲取表示錯誤,警告或「找不到數據」消息的數字錯誤代碼。
+1

在這種情況下,我正在處理ondeleted處理程序中的SqlDataSourceStatusEventArgs.Exception。我正在用VS調試器檢查異常,但看着錯誤的地方。 (我認爲)我不得不拋出異常作爲SqlException - 似乎無論如何工作,讓我訪問您列出的成員。 – Matt 2010-06-09 17:22:48

1

試試這個,看看所有的消息都是

SELECT * 
FROM master.dbo.sysmessages 
1

SQL Server錯誤消息位於master.dbo.sysmessages

在ASP.NET如果趕上異常作爲隨後的SQLException錯誤編號和消息將可用。

,我認爲它是通過SQL錯誤進行迭代,因爲可能不止一個

(未經測試)

try 
{ 
// Do some stuff here 
} 
catch (SQLException sqlex) 
{ 
foreach (SqlError error in sqlex.Errors) 
{ 
Console.WriteLine(error.Number.ToString()); 
Console.WriteLine(error.Message.ToString()); 
} 
} 
catch (Exception ex) 
{ 
} 
相關問題