2009-05-08 7 views
8

Ok, ho chiesto questo errore molto presto questa settimana e ho avuto alcune risposte molto utili e senza dubbio le cose sono drasticamente migliorate da quando ho iniziato a seguire i suggerimenti.ExecuteReader richiede una connessione aperta e disponibile. Lo stato attuale della connessione è chiuso

Tuttavia, ora sto utilizzando il metodo "corretto", best practice per accedere al database. Ricevo ancora questo errore su alcune funzioni e non riesco a farlo scomparire per quel blocco. Ecco il mio codice:

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 

Ora non importa quello che faccio ottengo: ExecuteReader richiede una connessione aperta e disponibile. Lo stato attuale della connessione è chiuso. su questa connessione. Ho delle funzioni con oggetti denominati la stessa cosa all'interno di questa classe (cmd, dr, ecc.) Ma Usando si chiude dopo se stesso no?

Suggerimenti benvenuti :)

risposta

14

Penso che tu abbia dimenticato di aprire la connessione.

Aprire prima di questa linea:

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

Usando -

db.Open() 
2

È in realtà dimenticato di Open collegamento:

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

Una ragione di ciò è che la tua connessione potrebbe non si aprirà affatto. Qualunque eccezione che viene all'istruzione "SqlConnection.Open" viene eliminata. Se il problema non è nella tua applicazione, potrebbe essere che il server non è in grado di garantirti una connessione. Potrebbe essere a causa di una perdita di connessione nella tua app o in qualche altro database ospitato sullo stesso server.