我有一个简单的Windows窗体应用程序。我使用了Timer和on Timer interval我正在检查在线数据库中的值并在表单上更新它。
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地址。我在CheckInternetConnection内部将Timer_Tick中的功能包装起来,这样当只有互联网连接时,就会进行数据库操作。
现在我面临的问题是,当我切换互联网(使用两个不同的wifi连接)时,当我打开和关闭互联网时,很少代码被破坏并且为线路适配器创建了异常。填充(ds)。我的猜测是因为在功能开始时可以使用互联网连接,并且通过了互联网检查的条件。当程序开始执行数据库操作时,那时很少有互联网消失,所以程序会引发异常。
我给出的示例是针对一个函数而实际的应用程序(很长时间以前写的很大)是这样的,我必须在同一代码中修复连接问题。如何在没有互联网连接的情况下使这个傻瓜证明没有达到数据库代码?
答案 0 :(得分:0)
使用循环尝试多次。 E.g。
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
}
}