Как установить ConnectionTimeout в 0 в Sql Server 2008? - PullRequest
0 голосов
/ 05 января 2010

Я установил таймаут на 0, но соединение закрывается преждевременно, что не так с этим утверждением?

        Using odbcconn As New OdbcConnection(DataShared.gstrCNN)

        odbcconn.ConnectionTimeout = 0
        odbcconn.Open()
        Dim OdbcCmd As New OdbcCommand( _
            "{ ? = CALL [proc_Cp_GenEstadoCta](" & _
            PCOD_EMPR & ", " & _
            PPER_ANUAL & "," & _
            DataShared.gintCODUSER & " ) }", odbcconn)

        OdbcCmd.Parameters.Add("@return", OdbcType.Int)
        OdbcCmd.Parameters("@return").Direction = ParameterDirection.ReturnValue

        OdbcCmd.ExecuteNonQuery()
        If CInt(OdbcCmd.Parameters("@return").Value) = 0 Then
            GenEstadoMovsSaldos = True
        Else
            GenEstadoMovsSaldos = False
        End If

    End Using

Исправленный код

        Using odbcconn As New OdbcConnection(DataShared.gstrCNN)

        --odbcconn.ConnectionTimeout = 0

        odbcconn.Open()
        Dim OdbcCmd As New OdbcCommand( _
            "{ ? = CALL [proc_Cp_GenEstadoCta](" & _
            PCOD_EMPR & ", " & _
            PPER_ANUAL & "," & _
            DataShared.gintCODUSER & " ) }", odbcconn)

        OdbcCmd.CommandTimeout = 60

        OdbcCmd.Parameters.Add("@return", OdbcType.Int)
        OdbcCmd.Parameters("@return").Direction = ParameterDirection.ReturnValue

        OdbcCmd.ExecuteNonQuery()
        If CInt(OdbcCmd.Parameters("@return").Value) = 0 Then
            GenEstadoMovsSaldos = True
        Else
            GenEstadoMovsSaldos = False
        End If

    End Using

Работает хорошо!

1 Ответ

3 голосов
/ 05 января 2010

Чего вы хотите добиться, установив тайм-аут соединения на ноль?

Тайм-аут соединения - это время ожидания при попытке открыть соединение с базой данных. Это не имеет ничего общего с закрытием соединения.

Возможно, вы ищете свойство CommandTimeout в классе OdbcCommand? Установка CommandTimeout в ноль уберет ограничение по времени при ожидании выполнения запроса.

Однако, если база данных переходит в автономный режим, ваша программа будет бесконечно ждать чего-то, что не произойдет, поэтому вам следует рассмотреть возможность установки более длительного времени, чтобы команда в конечном итоге истекла, а не никогда.

(Кстати, почему вы используете драйвер базы данных ODBC вместо более быстрого и специализированного драйвера SqlClient?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...