2009-05-08 32 views
8

Ok, pregunté sobre este mismo error a principios de esta semana y tuve algunas respuestas muy útiles y sin duda las cosas han mejorado drásticamente desde que comencé a seguir las sugerencias.ExecuteReader requiere una conexión abierta y disponible. El estado actual de la conexión está cerrado

Sin embargo, ahora estoy usando el método "correcto" y de mejores prácticas para acceder a la base de datos. Aún obtengo este error en algunas funciones y no puedo lograr que desaparezca para ese bloque. Aquí está mi código:

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 

Ahora, sin importar lo que haga, obtengo: ExecuteReader requiere una conexión abierta y disponible. El estado actual de la conexión está cerrado. en esta conexión. Tengo funciones con objetos llamados lo mismo dentro de esta clase (cmd, dr etc.) pero el uso se cierra después de sí ¿no?

Se aceptan sugerencias :)

Respuesta

14

Creo que se ha olvidado de abrir la conexión.

abra antes de esta línea:

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

Utilizando -

db.Open() 
2

En realidad se olvidó de Open conexión:

 db.Open() 
     Using dr As SqlDataReader = cmd.ExecuteReader() 
1

Una razón para esto sería que su conexión podría no estar abriendo en absoluto. Cualquiera que sea la excepción que viene en la declaración "SqlConnection.Open" está siendo suprimida. Si el problema no está en su aplicación, es posible que el servidor no pueda otorgarle una conexión. Podría ser debido a una pérdida de conexión en su aplicación o en alguna otra base de datos alojada en el mismo servidor.

Cuestiones relacionadas