在類中添加斷言

簡述:
用try捕獲異常後主動拋出一個異常,在Global.asax.vb的Application_Error中用Server.ClearError()清除異常,用System.Web.HttpContext.Current.Response輸出javascript代碼實現信息提醒和返回上一頁。


詳細說明:
例如,把連接數據庫的方法做成一個類cdbconn.vb。問題在於當數據庫連接失敗的時候,系統自動拋出的連接失敗的異常的處理。
由於程序調用該類的對象後的動作不可預計,因此最好在處理該異常後,後臺程序就此結束,返回之前的頁面。
在類中捕獲異常同樣可以try,但是處理完後使後臺程序就此結束就有點麻煩,在論壇中搜索到了思歸大大給的一個連接:

HOW TO: Create Custom Error Reporting Pages in ASP.NET by Using Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;306355
vb.net的聯接是
http://support.microsoft.com/default.aspx?scid=kb;EN-US;308132

實踐得出方案如下:
在類文件cdbconn.vb中有
Try
            dbconn.Open()
        Catch ex As Exception
            'System.Web.HttpContext.Current.Response.Write(win.msgbox(strMsg_noneDatabase))
            Throw New System.Exception(strMsg_noneDatabase)
End Try
截獲異常後再拋出一個異常。這話聽起來有點毛病,主要的用途在於可能會需要處理異常帶來的麻煩,這裏沒有什麼需要處理,所以只是自定義一個異常信息給系統用戶。

在Global.asax.vb中的Application_Error中添加相關動作
    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' 在發生錯誤時激發
        Dim objErr As Exception = Server.GetLastError().GetBaseException()
        Dim err As String = "Error Caught in Application_Error event" & _
                            System.Environment.NewLine & _
                            "Error in: " & Request.Url.ToString() & _
                            System.Environment.NewLine & _
                            "Error Message: " & objErr.Message.ToString() & _
                            System.Environment.NewLine & _
                            "Stack Trace:" & objErr.StackTrace.ToString()

        'EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error)
        Server.ClearError()
        System.Web.HttpContext.Current.Response.Write("<script language='javascript'>alert('" & objErr.Message.ToString & "');</script>")
        System.Web.HttpContext.Current.Response.Write("<script language='javascript'>history.go(-1);</script>")
    End Sub

這裏'EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error)會使異常正常拋出,而不會繼續向下執行,所以註釋掉了,msdn上拷來的,難道是版本問題?

最重要的就是Server.ClearError(),沒有它異常會正常拋出的。截止到這一句系統會返回一張白紙,什麼都沒有這當然是不行的,所以下面用response輸出提示,並返回上一頁。至此問題解決。

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章