【问题标题】:Is there a way to handle SQLExceptions that are generated by SqlDataSource有没有办法处理由 SqlDataSource 生成的 SQLExceptions
【发布时间】:2020-12-15 23:34:28
【问题描述】:

我的一个 vb 应用程序出现问题,它在一天中的某个时间崩溃。在我的代码中,只有 4 个地方可能是导致崩溃的原因。其中三个来自 SQLDataSource 查询,另一个在后面的代码中。我很确定后面的代码没有问题,因为我有一个 using 块。此外,在该块内部,我有一个 try catch finally ,在 finally 我正在处理命令以及连接和关闭连接的位置。我一直在阅读一些文章,这些文章告诉我应该使用 SqlDataSource“选定”事件来关闭连接。我试了一下,但没有成功。这是我收到的错误:

SqlException (0x80131904):执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。

这让我觉得“选定”事件没有机会被解雇。所以我想我应该尝试“选择”事件。在其中,我试图抓住连接字符串并关闭它。但我不太确定我是否走在正确的道路上,因为我无法在该事件中捕获异常。有人可以帮我解决我面临的这个问题吗?

编辑: 这是我如何尝试使用选定事件来关闭连接的示例

If Not IsNothing(e.Exception) Then
        Debug.Print("Exeception encounted while selecting for sqlData")
End If

e.ExceptionHandled = True

这是我如何尝试使用选择事件的示例(我无法确定此处是否引发了异常)。

 Dim sqlDataConn As SqlConnection = New SqlConnection("MYConnectionString")
 
 sqlDataConn.Dispose()
 

【问题讨论】:

  • 最好的办法是在这里发布代码

标签: vb.net timeout sqlexception


【解决方案1】:

如果你想拦截SqlException,你需要使用显式的“using”,即try/catch。然后,您可以通过Number 属性确定具体问题。

try


catch ex as SqlException
    MessageBox.Show(ex.Number)
    if ex.Number = xxx then
        ' do something
    end if
catch ex as Exception

finally

end try

如果关于处理这个的问题

If Not IsNothing(e.Exception) Then
    Debug.Print("Exeception encounted while selecting for sqlData")
End If

可以查看异常类型

If e.Exception IsNot Nothing AndAlso TypeOf e.Exception Is SqlException Then
.....

【讨论】:

  • 感谢您的回复。不幸的是,这种情况每天只发生一次。我将在“选择”和“选择”事件中尝试一下,并让您知道我的结果。
  • 我试了一下,没有达到任何选择事件。我知道这一点,因为我有代码在选择和选择事件中的捕获开始时写入文件。不太确定从这里去哪里。你能提供一些其他的建议吗?我检查异常的方式是否让我失望(Not IsNothing(e.Exception) vs e.Exception IsNot Nothing)?
【解决方案2】:

如果您执行断点并找到存在此问题的查询,将会有所帮助。超时问题是长时间运行的查询因为超过了默认超时期限而自行终止。

一个快速而肮脏的解决方案可能是在您使用的连接字符串中使用更大的超时时间,但长时间运行的查询通常可能是未优化查询的不良迹象,应该在您的数据库变得更大之前解决。

【讨论】:

  • 连接字符串中的超时设置被设置为连接的超时。查询超时应在 SQLCommand 的 CommandTimeout 属性中设置
  • 谢谢。我的假设是,如果有一个这样的查询,可能会有更多。
  • 当查询自行终止时,我应该期望它去 onselected 事件吗?我正在考虑增加 CommandTimeout,但我不只是想给这个问题贴上绷带。你有什么其他建议我可以尝试吗?
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2016-02-14
相关资源
最近更新 更多