Ошибка обработки тайм-аута соединения

0

Иногда, когда мой сервер выключен или занят, я получаю сообщение об ошибке "время соединения" при подключении к 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
Теги:

2 ответа

1
Лучший ответ

Если вы не хотите видеть 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.

  • 0
    спасибо, что это работает, но на этот раз я получаю почти 20 сообщений.
  • 0
    Это бремя «сделать что-то значимое», о котором я говорил. Не пытайтесь использовать базу данных, когда вы получили ложное возвращение. Может быть, вы должны сказать пользователю, чтобы вызвать поддержку и прекратить вашу программу.
0

Один из способов, которым это может случиться, - это не правильно расположить свои соединения. Например, скажем, исключение вызывается из-за проблемы в вашем 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
  • 0
    это не работает, когда я вызываю функцию соединения во второй раз, я все еще получаю ошибку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню