有没有办法捕获数据库异常,然后重定向到错误页面?我有一个数据访问类,我用它来建立一个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
答案 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的免费版本,我恐怕不是我的母语