【发布时间】:2013-07-03 17:36:46
【问题描述】:
我正在用 C# 编写一个 ASP.NET 应用程序,并且我正在处理可能从另一个文件中抛出的异常。我有一个我编写的 C# 类文件,其中包含执行 SQL 命令的方法,并且我想防止在我的应用程序投入生产后引发可能的异常。
这是我写的SQL方法,我故意在(From SqlData.cs)中抛出错误:
public SqlConnection openConnection()
{
//Create an SQL connection
SqlConnection myConnection = new SqlConnection("My intentionally incorrect connection string");
//Open the connection
try
{
myConnection.Open();
}
catch (SqlException myAppEx)
{
throw new ApplicationException("There was an error opening the SQL database connection", myAppEx);
}
return myConnection;
}
我使用以下代码行从我的 Default.aspx.cs 文件中调用此方法:
try
{
//The ReadDT method calls openConnection() in itself
dt = sqlData.ReadDT(query);
}
catch (ApplicationException exc)
{
throw exc;
}
我正在尝试实现页面级异常处理,如果在当前页面上引发异常,则应该调用 Page_Error 方法,如引用 here。这就是为什么我捕获从我的 SqlData.cs 类文件中抛出的异常,然后重新抛出异常,以便服务器可以看到这个异常。因此,Server.GetLastError() 不会返回 null。
作为实现here,我有一个单独的错误页面,显示有关异常的所有信息。我的 Page_Error 方法如下:
private void Page_Error(object sender, EventArgs e)
{
Server.Transfer("ErrorPage.aspx?handler=Page_Error%20-%20Default.aspx", true);
}
从这里用户被重定向到我的 ErrorPage.aspx 并且最初抛出的SqlException 完美显示。
问题 - 当我从 SqlData.cs 捕获异常并重新抛出异常时,会引发 UnhandledException。如果我不在 ReadDT 方法调用周围放置 try catch 块,则会从我的 SqlData.cs 文件中引发相同的 UnhandledException。
代码跟踪:
-
throw new ApplicationException("There was an error opening the SQL database connection", myAppEx);(这工作正常) - 然后捕获并重新抛出异常(
UnhandledException发生) -
Page_Error方法按原样调用,一切正常执行!
我希望我已经清楚地回答了自己,我已经对异常和我的特定问题进行了大量研究,但我没有成功找到答案。
谢谢, 埃里克
【问题讨论】:
-
所以您的总体目标是确保在发生异常时将用户重定向到错误页面?
-
全局文件中的
Application_Exception怎么样? -
Listen to Shekhar... global.aspx 文件中有一个全局异常处理程序或其他任何名称...您可以使用它(我过去有)重定向到自定义错误页面...
-
@Arran - 当异常发生时,用户被引导到错误页面,但在不应该出现的情况下,
UnhandledException被抛出。 @Shekhar 和 @MartinMilan - 我之前使用过 Application_Exception 方法,但在应用程序到达Application_Exception方法之前发生了UnhandledException异常。
标签: c# asp.net sql exception-handling