Иногда, когда мой сервер выключен или занят, я получаю сообщение об ошибке "время соединения" при подключении к MySQL. Но с ошибкой программа также падает. Мой вопрос: как я могу предотвратить сбой, было бы лучше показать msgbox, когда это произойдет. (визуальный базовый 2010)
Я использую это,
Dim connStr As String = "Database=mydatabase;" & _
"Data Source=datasrc;" & _
"User Id=myid;Password=mypass"
Dim connection As New MySqlConnection(connStr)
connection.Open() // I get error here
Если вы не хотите видеть ThreadExceptionDialog, вам нужно поймать исключение в вашем коде. Например:
Public Function ConnectToDbase() As Boolean
Try
connection.Open()
'--- etc
Return True
Catch ex As TimeoutException
MessageBox.Show(ex.Message, "Could not connect to the database")
Return False
End Try
End Function
Теперь бремя лежит на коде, который использует ConnectToDbase(), чтобы сделать что-то значимое, когда он возвращает False.
Один из способов, которым это может случиться, - это не правильно расположить свои соединения. Например, скажем, исключение вызывается из-за проблемы в вашем SQL-коде, и оно попало, но поймано таким образом, что вы никогда не вызываете connection.Close()
. В конце концов, у вас не будет доступных подключений, и ваш вызов connection.Open()
завершится с ошибкой и тайм-аут при попытке подключения. Чтобы этого избежать, вы должны создать свои соединения с помощью блока "using", например:
Using connection As New MySqlConnection(connStr), _
command As New MySqlCommand("sql statement here")
connection.Open()
End Using ''# connection is guaranteed to be closed here, even if an exception is thrown