我在C#中編寫ASP.NET應用程序,我正在處理可能從其他文件拋出的異常。我有一個我編寫的C#類文件,其中包含執行SQL命令的方法,並且我希望在應用程序投入生產時防止出現可能的異常。從單獨的類文件在ASP.NET(C#)中的異常處理
這是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事件方法被調用,如引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
方法被調用,因爲它應該是,一切執行正確!
我希望我在回答自己時已經很清楚,我已經對異常和我的特殊問題進行了大量研究,並且我沒有找到答案。
感謝, 埃裏克
所以你在這裏的總體目標是確保在發生異常時用戶會被重定向到一個錯誤頁面? – Arran
全局文件中的'Application_Exception'怎麼樣? –
收聽Shekhar ... global.aspx文件中有一個全局異常處理程序或任何它被稱爲...你可以使用這個(我有過去)重定向到一個自定義的錯誤頁面... –