Vb.net 防止因缺少internet连接而出现异常

Vb.net 防止因缺少internet连接而出现异常,vb.net,winforms,ado.net,Vb.net,Winforms,Ado.net,我有一个简单的Windows窗体应用程序。我使用了一个计时器,在计时器间隔内,我检查在线数据库中的值,并在表单上更新它 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 =

我有一个简单的Windows窗体应用程序。我使用了一个计时器,在计时器间隔内,我检查在线数据库中的值,并在表单上更新它

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 google公共DNS,但在我的应用程序中,这是我的数据库服务器的IP地址。我已经将该功能包装在CheckInternetConnection中的Timer_Tick中,这样当只有internet连接时,才会执行数据库操作

现在我面临的问题是,当我使用两种不同的wifi连接切换互联网时,以及当我打开和关闭互联网时,代码很少被破坏,并且为line adapter.Fillds创建异常。我的猜测是,这是因为在功能开始时,互联网连接可用,并且通过了互联网检查的条件。当程序开始执行数据库操作时,此时internet很少消失,所以程序引发异常


我给出的例子是一个函数,实际的应用程序非常大,很久以前就已经编写好了,我必须在相同的代码中解决连接问题。在没有互联网连接的情况下,我如何证明没有数据库代码可以访问

使用循环尝试多次。例如

int numTries = 3;
while (numTries > 0) {
  numTries--;

  try {
    // open connection, fill 
    // your code
    break; // got here means success
  } catch {
    if (numTries == 0)
        throw; // propagate exception to next level
    Thread.Sleep(500); // optional sleep
  }
}

我认为在任何情况下都无法摆脱异常处理程序。当应用程序无法控制的情况发生时(如连接中断),除了处理可能的异常外,您别无选择。这并不是说它们被称为异常。@史蒂夫,是的,你在某种程度上是对的,但作为一名程序员,我想对这一点进行所有可能的检查。我只是不想在没有互联网连接的情况下执行代码。如果在所有的解决方案之后它仍然中断,那么是的,将会有异常处理程序。我想到了同样的方法,并且正在实现同样的方法。很高兴认识像我这样思考的人。将等待更多选项,然后再选择它作为答案。谢谢你的回答。