2010-09-25 60 views
3

從C#代碼中刪除具有引用約束的數據時,捕獲拋出SQL Server的異常的正確方法是什麼?
我想告訴我的用戶信息,如:
「我無法刪除的數據,因爲使用」
,而不是顯示這樣的消息:從C#中的SQL中捕獲參考約束異常

The DELETE statement conflicted with the REFERENCE constraint ... The conflict ccurred*in database "rampa", table "dbo.doc", column 'kartica_id'. 

回答

6

使用此:

try 
{ 
    //Execute delete statement 
} 
catch (SqlException sqlEx) 
{ 
    //Handle exception 
} 
finally 
{ 
    //Close connection 
} 

所有SQL錯誤拋出爲SqlException,也沒有具體的錯誤。要確切地找出錯誤,有屬性SqlException.Number,它與SQL錯誤代碼相同。你可以找到代碼列表here

+0

您的結論「沒有具體的錯誤」與Steve Townsend的答案有衝突,無論如何謝謝+1與錯誤代碼的鏈接 – adopilot 2010-09-25 12:24:59

+1

那麼,ConstraintException並不是通過執行SQLCommands捕獲的,而是通過使用dataadapters捕獲的 - 它處理SQLException並拋出ConstraintException – 2010-09-25 12:30:45

+0

@adopilot - @伊萬在這裏是正確的。您必須如何處理這取決於您的ADO.Net使用情況。對於SqlClient不同。 – 2010-09-25 13:01:20

2

您可以訪問ConstraintException並映射其領域,但是你想要自己的首選錯誤輸出。

using System.Data; 

try 
{ 
    // code that violates constraint 
} 
catch (ConstraintException exc) 
{ 
    // build output message you wish using exc.Message and other fields, 
    // return cleanly or rethrow as your own exception 
}