ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто - PullRequest
8 голосов
/ 08 мая 2009

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

Однако теперь я использую «правильный», лучший метод для доступа к базе данных. Я все еще получаю эту ошибку в некоторых функциях и не могу заставить ее исчезнуть для этого блока. Вот мой код:

    Public Shared Function doesBasketExist(ByVal baskethash As String) As Boolean
    Dim _r As Boolean
    Using db As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString)
        Using cmd As New SqlCommand("doGetBasketByHash", db)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@baskethash", baskethash)
            Using dr As SqlDataReader = cmd.ExecuteReader()
                If dr.HasRows() = True Then
                    _r = True
                Else
                    _r = False
                End If
                dr.Close()
            End Using
        End Using
    End Using
    Return _r
End Function

Теперь, что бы я ни получал: ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто. на этой связи. У меня есть функции с объектами, называемыми в этом классе одним и тем же (cmd, dr и т. Д.), Но использование закрывается после себя, не так ли?

Предложения приветствуются:)

Ответы [ 3 ]

14 голосов
/ 08 мая 2009

Я думаю, вы забыли открыть соединение.

Откройте его перед этой строкой:

cmd.Parameters.AddWithValue("@baskethash", baskethash)

Использование -

db.Open()
2 голосов
/ 08 мая 2009

Вы на самом деле забыли Open соединение:

        db.Open()
        Using dr As SqlDataReader = cmd.ExecuteReader()
1 голос
/ 21 декабря 2011

Одной из причин этого может быть то, что ваше соединение вообще не может быть открыто. Любое исключение, которое появляется в операторе "SqlConnection.Open", подавляется. Если проблема не в вашем приложении, возможно, сервер не может предоставить вам соединение. Может быть из-за утечки соединения в вашем приложении или в другой базе данных, размещенной на том же сервере.

...