【发布时间】:2015-10-01 16:58:32
【问题描述】:
我有一个简单的 Windows 窗体应用程序。我使用了 Timer,并且在 Timer 间隔上,我正在检查在线数据库的值并在表单上更新它。
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
Try
String ConnectionString = globalConnString
Dim SQL As String = "SELECT AnnouncementID, AnnoucementText FROM tblAnnouncements"
Dim conn As SqlConnection = New SqlConnection(ConnectionString)
conn.Open()
Dim adapter As SqlDataAdapter = New SqlDataAdapter(SQL, conn)
Dim ds As DataSet = New DataSet("Announcements")
adapter.Fill(ds)
UpdateForm(ds)
Catch ex As Exception
LogError("Timer_Tick", ex)
End Try
End Sub
现在有时互联网断开连接或互联网速度非常慢。为此,我创建了如下函数,
Public Function CheckInternetConnection() As Boolean
Try
If My.Computer.Network.IsAvailable = True Then
Return My.Computer.Network.Ping("8.8.8.8")
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
此功能正在 ping 谷歌公共 DNS,但在我的应用程序中,这是我的数据库服务器的 IP 地址。我已将 Timer_Tick 中的功能封装在 CheckInternetConnection 中,这样只有在有 Internet 连接时才会进行数据库操作。
现在我面临的问题是,当我切换互联网(使用两种不同的 wifi 连接)以及打开和关闭互联网时,代码很少被破坏并且为线路适配器创建异常。填充(ds)。我的猜测是,这是因为在功能开始时有可用的互联网连接并且通过了互联网检查的条件。当程序开始执行数据库操作时,此时很少有互联网消失,因此程序会引发异常。
我给出的示例是针对一个函数的,而实际应用程序(相当大并且很久以前编写的)就是这样,我必须在同一代码中解决连接问题。当没有互联网连接时,我如何才能证明没有任何数据库代码被访问过?
【问题讨论】:
-
我认为无论如何你都无法摆脱异常处理程序。当某些事情可能在您的应用程序控制之外发生时(例如连接性下降),您别无选择,只能处理可能的异常。它们不是称为异常的情况。
-
@Steve,是的,您在某种程度上是对的,但作为一名程序员,我想对此进行所有可能的检查。我只是不想在没有互联网连接时执行代码。如果在所有解决方案之后它仍然中断,那么是的,会有异常处理程序。