捕获数据库连接错误

时间:2011-02-11 12:51:41

标签: .net asp.net vb.net

有没有办法捕获数据库异常,然后重定向到错误页面?我有一个数据访问类,我用它来建立一个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

3 个答案:

答案 0 :(得分: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,通常捕获这样的泛型(所有异常都来自catch)将被视为不良形式,因为这意味着你正在努力迎合发生的任何而不确定发生了什么。这只是一个向你展示的例子=)

总是值得查看msdn文档页面,了解您正在包装try / catch的函数,因为其中一些列出了可能引发的“预期”(但不是所有)异常如果您有办法处理失败案例,可以考虑SqlConnection.Open。在这种情况下,要查看的页面将是:

InvalidOperationException的文档列出了它可以抛出的两个例外,SqlException和{{1}}。我强烈建议您查看该文档,以决定“做什么”并“捕获”您认为适合您的那些例外类型。

答案 1 :(得分:0)

使用Try / Catch Block(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

答案 2 :(得分: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

这个特定解决方案的一个缺点是,它会导致您的数据访问类必须知道HttpResponse对象,这可能是不可接受的,具体取决于您对关注点分离的重要程度。

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

可能无效的VB的免费版本,我恐怕不是我的母语