我正在用 C# 编写一个 ASP.NET 应用程序,并且我正在处理可能从另一个文件中抛出的异常。我有一个我编写的 C# 类文件,其中包含执行 SQL 命令的方法,并且我想防止在我的应用程序投入生产后引发可能的异常。
这是我写的 SQL 方法,我故意在(来自 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 方法,如此处所述。这就是为什么我捕获从我的 SqlData.cs 类文件中抛出的异常,然后重新抛出异常,以便服务器可以看到这个异常。因此,Server.GetLastError()
不会返回null
。
正如这里实现的那样,我有一个单独的错误页面,显示有关异常的所有信息。我的 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
会引发 an 。如果我没有在 ReadDT 方法调用周围放置一个 try catch 块,则会UnhandledException
从我的 SqlData.cs 文件中引发同样的问题。
代码跟踪:
throw new ApplicationException("There was an error opening the SQL database connection", myAppEx);
(这工作正常)- 然后捕获并重新抛出异常(
UnhandledException
发生) - 该
Page_Error
方法按原样调用,一切正常执行!
我希望我已经清楚地回答了自己,我已经对异常和我的特定问题进行了大量研究,但我没有成功找到答案。
谢谢,埃里克