【问题标题】:Close SQL connections cleanly when connection dropped连接断开时干净地关闭 SQL 连接
【发布时间】:2015-08-14 06:32:01
【问题描述】:

只是想知道当连接在 VB.NET(也可以是 C#.NET)中丢失时,我是否可以以最干净的方式关闭所有 SQL 连接和命令。

我想要达到的目标:

使用 System.Net.NetworkInformation.NetworkAvailabilityChanged 事件,我正在监视连接是否丢失。如果它丢失了,我将禁用所有用户输入 - 效果很好。网络恢复正常,UI 已启用。 (竖起大拇指)

然而,现在我的困境来了。如果在连接断开之前执行 SQL 查询,然后网络丢失,则查询会按预期返回空值,但是如果这是数据表/字段的中间填充,那么我会得到 NullReferenceExceptions。

我的问题是:

在连接断开后是否可以干净地退出子?我已经尝试过 Application.ExitThread,但这似乎并没有完全解决它。我是否需要在我的对象中放置断开的连接处理程序,以便在断开连接时,相应的对象不会返回或尝试分配空数据?

非常感谢任何帮助。不要求纯代码,如果可能的话需要解释。干杯。

【问题讨论】:

  • 如果一个查询/对象应该返回数据,或者将数据写入数据库,但它无法实现该目的,则抛出异常。 (你正在处理一个异常情况,你的对象不能做它应该做的事情。)然后让调用代码处理这些异常。
  • 这是有道理的,当然。然而,这意味着大部分代码将被包装在 try-catch 语句中。我想这是唯一可行的方法。谢谢!

标签: sql-server vb.net event-handling


【解决方案1】:

如果您遵循“使用”最佳实践,例如:

Using cn As New SqlConnection(connectionString)
    ...
End Using

然后编译器会在抛出异常时生成清理连接的代码。

【讨论】:

  • 我在 SQL 类中这样做,它们都包含在 using 语句中。我想我的问题有点不清楚 - 当我在一个已经调用函数以返回数据表的 sub 中时,如果我的网络在查询执行期间中断,我将如何退出该 sub?我想 stakx 将其包装在 try-catch 中并抛出异常的响应是最有意义的。不过,我非常感谢您的回复。干杯。
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2017-06-28
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
相关资源
最近更新 更多