2013-02-19 75 views
0

我正在做一個表單,用戶可以插入/刪除/添加實體。我正在使用Winforms c#和實體框架4.在捕獲中自定義Sql異常消息

好吧,用戶可以刪除對象。現在,這些對象可以被其他實體引用,所以如果用戶想要刪除它,他會得到一個異常。

我捕捉到這個異常,以便向他顯示一條消息,說明該對象開始在其他對象中使用。

我得到的異常是(UpdateException)。但是,如果還有更新問題,則可能會引發此異常。有什麼辦法從Sql使用這個異常來獲取錯誤代碼?因爲我確實有發生這種情況時拋出的錯誤代碼。

如果我使用SqlException,我可以檢查它的編號,但這不是我收到的異常。

+0

底層異常可能已保留在更新異常的InnerException屬性中。 – 2013-02-20 00:14:37

+0

而不是捕捉異常爲什麼你甚至在嘗試保存更改之前不檢測條件?您似乎預料到此異常,因此您不會將異常用作例外,而是控制應用程序的流程。 – Pawel 2013-02-20 01:54:22

+0

因爲我將不得不檢查每一個關係。我會用這個爲每個實體。我爲什麼要這樣做,如果sql管理自己?你告訴我的是和說「爲什麼使用try catch?」一樣。只是檢查之前的每一個錯誤可能性。只是沒有選擇。感謝您的回答,儘管 – Andres 2013-02-20 02:10:42

回答

-2

你的意思是你看到完整的異常或你想要的用戶到看到異常?

如果你想看到的異常,你可以寫一個文本文件:

try 
{ 
    // do something 
} 
catch(SQLException sqlex) 
{ 
    using (var file = new StreamWriter(@"C:\Users\Home\Desktop\sqlException.txt")) 
    { 
     file.WriteLine(sqlex.ToString()); 
    } 
} 
catch(Exception e) 
{ 
    using (var file = new StreamWriter(@"C:\Users\Home\Desktop\generalException.txt")) 
    { 
     file.WriteLine(e.ToString()); 
    } 
} 

這將寫入例外的文本文件在桌面上(變化目錄如適用)。

+0

-1:您的兩個'StreamWriter'實例需要位於'using'塊中。 – 2013-02-20 01:10:30

+0

你的意思是將兩個catch塊封裝在一個使用塊中?我只從一個我只用過一個catch塊的示例中得到了這個結果(我的工作) - 我只在這裏放入兩個catch塊來表明他可以爲一個文件寫入不同的異常。我的答案不能解決問題嗎? – MattSull 2013-02-20 01:14:08

+0

編號在'catch'塊裏面:'使用(var file = new StreamWriter(...)){file.WriteLine(e.ToString());}' – 2013-02-20 01:18:01