2009-05-08 5 views
8

Ok, j'ai posé une question sur cette erreur plus tôt cette semaine et j'ai eu des réponses très utiles et sans aucun doute les choses se sont considérablement améliorées depuis que j'ai commencé à suivre les suggestions.ExecuteReader requiert une connexion ouverte et disponible. L'état actuel de la connexion est fermé

Cependant, maintenant j'utilise la méthode «correcte», la meilleure pratique pour accéder à la base de données, je reçois toujours cette erreur sur certaines fonctions et je n'arrive pas à la faire disparaître pour ce bloc. Voici mon code:

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 

Maintenant, peu importe ce que je fais, j'obtiens: ExecuteReader nécessite une connexion ouverte et disponible. L'état actuel de la connexion est fermé. sur cette connexion. J'ai des fonctions avec des objets appelés la même chose dans cette classe (cmd, dr etc.) mais l'utilisation se ferme après elle-même, n'est-ce pas?

suggestions bienvenues :)

Répondre

14

Je pense que vous avez oublié d'ouvrir la connexion.

Ouvrez avant cette ligne:

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

aide -

db.Open() 
2

En fait, vous avez oublié de connexion Open:

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

L'une des raisons serait que votre connexion pourrait ne pas ouvrir du tout. Toute exception qui arrive à l'instruction "SqlConnection.Open" est supprimée. Si le problème ne figure pas dans votre application, il se peut que ce serveur ne puisse pas vous accorder une connexion. Peut-être en raison d'une fuite de connexion dans votre application ou dans une autre base de données hébergée sur le même serveur.

Questions connexes