[英]How to catch and log exception inside Using statement without using try-catch?
[英]How to handle exception without using try catch?
using (SqlConnection con = new SqlConnection())
{
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
這工作正常。 但我想知道我們是否可以在不使用try catch
情況下處理異常if else
? 或者它是使用try catch
補充。
除了 try catch 之外,沒有其他機制可以處理異常。 聽起來你想要類似的東西
if(connection.DidAnErrorOccur)
但那不存在。
好的,您可以在 global.asax 中實現 de Application_Error ,此方法是錯誤的第一道防線,適用於所有應用程序
http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx
對於特定頁面,例如 default.aspx,您可以實現Page_Error
http://msdn.microsoft.com/en-us/library/ed577840%28v=vs.100%29.aspx
如果您在 mvc 中工作以便您可以在您想要的每個控制器中實現OnException(ExceptionContext filterContext) ,則在發生未處理的異常時調用此方法。
http://devproconnections.com/aspnet-mvc/aspnet-mvc-tutorial-handling-errors-and-exceptions
或者你可以實現你的錯誤屬性
https://www.simple-talk.com/dotnet/asp.net/handling-errors-effectively-in-asp.net-mvc/
另一方面,也許您可以使用Assert 語句,這樣您就可以評估條件
唯一的方法是檢查所有會返回錯誤的條件。 無論如何你應該這樣做。 嘗試/捕獲是昂貴的。 Try catch 應該是最后的手段,為此沒有辦法繞過它。
我能給你的最好的選擇是 Elmah。 http://code.google.com/p/elmah/它將處理所有未捕獲的錯誤並記錄它們。 從那里我建議修復所述錯誤或捕獲您期望的特定錯誤,而不僅僅是捕獲可能發生的任何錯誤。 最好這樣做,以便您可以修復潛在問題,而不是因為發生異常而簡單地跳過代碼。
Tejs 的回答是正確的,我相信沒有其他機制可以處理錯誤。
但是,您可以處理更具體的錯誤。 您還可以在 try catch 之外聲明變量以查看它是否成功。
例子:
using (SqlConnection con = new SqlConnection())
{
bool sqlErrorOccurred;
try
{
con.Open();
sqlErrorOccurred = false;
}
catch (SqlException ex)
{
sqlErrorOccurred = true;
}
if(sqlErrorOccurred)
{
MessageBox.Show("A Sql Exception Occurred");
}
}
上面的答案是正確的。 但是,要注意的另一件事是可以設置全局異常處理程序。 這並沒有解決前面提到的防御性編碼的需要。 但是,如果擔心需要處理所有異常(例如,記錄錯誤),那么這種方法可能非常有用。
我正在構建一個使用實時流數據的系統,因此需要處理在其他一切都非常空閑時可能發生的錯誤。 我正在使用的 API 通過名為“error”的方法將錯誤傳遞回程序,並附加異常。 這個方法可能會拋出錯誤,但這是有問題的,因為我看不出把我的整個程序完全放在一個 try-catch 塊中是一個好主意。
因此,為了解決這個問題,我將設置一個事件處理程序來觸發我程序主要部分中的事件,然后它可以及時處理在該時間點拋出的任何錯誤。
例如:
在主類中:
private void Error(object sender, EventArgs e) {
Exception ex = sender as Exception;
Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception
// You could even add this if you want to then use the try -catch sequence (which
// makes the exception easier to parse and also enables you to stop the program
// with unhandled exceptions if it's something catastrophic:
try {
throw ex;
} catch (put.your.exception.detail.here) {
// do stuff
} finally {
// do other stuff
}
}
(在從 API 接收錯誤的類中):
class Foo {
public event EventHandler ThrowError;
protected virtual void OnError(Object src, EventArgs e) {
if (ThrowError != null) {
ThrowError(src, e);
}
}
private virtual void error(Exception e) {
OnError(e, EventArgs.Empty);
}
}
在 .NET core 3.1(或之前?)中,您可以為未處理的異常設置全局捕獲器。 但是,此后該應用程序將不會繼續運行。
下面是一個例子:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.