using (SqlConnection con = new SqlConnection())
{
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这工作正常。但我想知道我们可以在不使用try catch
某些东西的情况下处理异常if else
吗?或者使用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(或之前?)中,您可以为未处理的异常设置全局捕获器。但是,之后APP将无法继续运行。
这是一个例子: