2011-02-11 159 views
2

有没有办法捕捉数据库异常,然后重定向到错误页面?我有一个数据访问类,我用它来建立一个sql连接,然后调用它来执行我的SQL命令。我的问题是,如果我的数据库不可用,我不能捕获该错误。这里是我用我的类代码:捕获数据库连接错误

Protected Function GetConnection() As SqlConnection 
    Dim ret_conn As SqlConnection 
    ret_conn = New SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("EUCNET00617").ToString()) 
    ret_conn.Open() 
    GetConnection = ret_conn 
End Function 
+2

你有没有读到“在try..catch”块?!? http://msdn.microsoft.com/en-us/library/fk6t46tz%28v=VS.90%29.aspx – BertuPG 2011-02-11 12:58:29

回答

1

什么你要找的是try/catch/finally结构。这允许您捕获异常(错误)并对其做出反应。现在

Protected Function GetConnection() As SqlConnection 
    Dim ret_conn As SqlConnection 
    Try 
     ret_conn = New SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("EUCNET00617").ToString()) 
     ret_conn.Open() 
     GetConnection = ret_conn 
    Catch exceptionThatICaught as System.Exception 
     ' You could also perform logging of details from exceptionThatICaught here 
     GetConnection = Null 
    End Try 
End Function 

,你GetConnection函数将返回Null当它是无法创建并打开一个连接,这意味着调用代码,它可以反应到连接返回被空,而不是崩溃。

您可能已经注意到,我把在Catch块中的例外是System.Exception,通常赶上这样的通用(所有异常是从System.Exception派生)会被认为是不好的形式,因为它意味着你要照顾任何东西发生时不知道发生了什么。这只是一个例子给你看虽然=)

它总是值得检讨你包装一下你试试功能的MSDN文档页/左右赶上像他们有些人名单“预期”的(但不是所有)如果您有处理该失败案例的方法,则可能会抛出的异常可以被认为是catch。在这种情况下,要查看的页面将是:

SqlConnection.Open列出两个例外,它可以抛出,InvalidOperationExceptionSqlException的文档。我强烈建议您查看该文档,以便决定“做什么”和“捕获”哪种异常类型,您认为适合您这样做。

0

使用try/catch块(MSDN Link

Protected Function GetConnection() As SqlConnection 
    Try 
     Dim ret_conn As SqlConnection 
     ret_conn = New SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("EUCNET00617").ToString()) 
     ret_conn.Open() 
     GetConnection = ret_conn 
    Catch Ex As Exception 
     'Write code to log error and then redirect to your error page 
    Finally 
     'Something you always want to happen 
    End Try 
End Function 
0

在阅读代码时首先想到的是,如果在打开连接时出现错误,SqlConnection.Open会抛出SqlClientException异常。可以通过将ASP.NET重定向到错误页面来捕获此异常并对其做出响应。

Try 

    ret_con.Open(); 

Catch Exception ex As SqlClientException 

    //logging and other things ommitted 
    Response.Redirect("/errors/page"); 
    End Try 

一本特定解决方案的negitives的是,它使你的数据访问类,以便了解有关HttpResponse对象这取决于你是多么重要关注点分离是无法令人接受。

另一个选项是捕获异常,记录并重新抛出异常,以便它可以冒泡,导致重定向到通过web.config为该站点配置的自定义错误页面。有关设置自定义错误的更多信息,请参见here

Appoligies为可能无效的VB,这不是我的母语,我怕