【问题标题】:Preventing exception from lack of internet connectivity防止因缺少 Internet 连接而出现异常
【发布时间】: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,是的,您在某种程度上是对的,但作为一名程序员,我想对此进行所有可能的检查。我只是不想在没有互联网连接时执行代码。如果在所有解决方案之后它仍然中断,那么是的,会有异常处理程序。

标签: vb.net winforms ado.net


【解决方案1】:

使用循环尝试多次。例如

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
  }
}

【讨论】:

  • 我也有同样的想法并正在实施。很高兴知道有人像我一样思考。在选择它作为答案之前将等待更多选项。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多