VB6 ADODB.Connection Execute() Повторить до успешного
Я пытаюсь исправить небольшую утилиту, которая, кажется, теряет соединение с базой данных после некоторого простоя. Я уже установил таймаут на 0, но это не сработало.
Вместо простого сбоя и отображения пары сообщений об ошибках я хотел бы попытаться восстановить соединение и выполнить запрос до успешного завершения (я понимаю, что это, вероятно, неправильное использование ресурсов), но даже тогда я пытаюсь выполнить здесь. Или, если возможно, отобразить окно сообщения о том, что соединение было потеряно, которое затем будет закрыто после установления соединения.
Любые предложения будут ценны.
Public connMain As ADODB.Connection
Public rsMain As ADODB.Recordset
......
Function Picture_Exists() As Boolean
On Error Resume Next
sqlstr = "select * .... "
Set rsMain = connMain.Execute(sqlstr)
2 ответа
Ваше соединение, вероятно, сбрасывается в конце базы данных из-за неиспользования. Не рекомендуется поддерживать соединение, когда оно не используется; соединения дороги с точки зрения ресурсов, поэтому любая такая практика не будет хорошо масштабироваться. Dbadmins, скорее всего, не оставит неиспользованными соединения открытыми очень долго.
Ваше потенциальное решение говорит, чтобы попытаться подключиться, и если вы не можете игнорировать ошибку. Мы не говорим "никогда" в этом бизнесе очень часто, но вы никогда не должны использовать "On Error Resume Next" без оценки Err.Number, чтобы увидеть, равно ли оно 0 (если это так, ошибки нет). Это называется "встроенной обработкой ошибок".
В любом случае я бы не стал использовать этот метод. Я бы оценил свойство State объекта Connection, и если он будет закрыт (cn.State = adoStateClosed), я бы снова его открыл.
Вы можете попробовать следующее:
On Error Resume ''''instead of On Error Resume Next
Dim rsMain As New ADODB.Recordset
sqlstr = "select * .... "
If rsMain.State = adStateOpen Then rsMain.Close
rsMain.Open sqlstr, sProvider, adOpenKeyset, adLockOptimistic