.net 捕获数据库连接错误

.net 捕获数据库连接错误,.net,asp.net,vb.net,.net,Asp.net,Vb.net,是否有方法捕获数据库异常,然后重定向到错误页?我有一个数据访问类,用于建立sql连接,然后调用该类的函数来执行sql命令。我的问题是,如果我的数据库不可用,我就无法捕获该错误。以下是我在课堂上使用的代码: Protected Function GetConnection() As SqlConnection Dim ret_conn As SqlConnection ret_conn = New SqlConnection(System.Web.Configuration.Web

是否有方法捕获数据库异常,然后重定向到错误页?我有一个数据访问类,用于建立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
使用Try/Catch块()


你要找的是构造。这允许您捕获异常(错误)并对其作出反应

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
,这意味着调用它的代码可以对返回的连接为Null作出反应,而不是崩溃

您可能已经注意到,我在
Catch
块中输入的异常是
System.Exception
,通常捕获这样一个泛型(所有异常都派生自
System.Exception
)将被视为坏形式,因为这意味着你试图迎合任何发生的事情,而不知道发生了什么。这只是一个向您展示的示例=)

<> p>总是值得回顾一下MSDN文档页面,因为它们包括了您尝试/捕获的功能,因为其中一些列表中列出了“预期”(但不是全部)异常,如果您有处理失败案例的方式,这些异常可能被抛出,这些代码可以考虑<代码> catch >代码> ING。在这种情况下,要查看的页面将是:


SqlConnection.Open
的文档列出了它可以引发的两个异常,
invalidooperationexception
SqlException
。我强烈建议您查看该文档,以决定“做什么”和“捕获”无论您认为哪种异常类型适合您这样做。

阅读代码时首先想到的是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为站点配置的自定义错误页面。可以找到有关设置自定义错误的更多信息


为可能无效的VB道歉,恐怕这不是我的母语

你读过“try..catch”块吗?!?你不应该真正打开你的连接,直到你需要它,然后你应该立即关闭它,当你完成它。因此,您的消费代码将是
conn=GetConnection()。。。连接打开()。。。PerformDataPull()。。。连接关闭()
。在您拥有的位置打开连接很容易导致孤立连接的可能性。
    Try

    ret_con.Open();

Catch Exception ex As SqlClientException

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