2009-05-08 12 views
8

Ok, ich fragte Anfang dieser Woche nach diesem Fehler und hatte einige sehr hilfreiche Antworten und ohne Zweifel haben sich die Dinge drastisch verbessert, seit ich anfing, den Vorschlägen zu folgen.ExecuteReader benötigt eine offene und verfügbare Verbindung. Der aktuelle Status der Verbindung ist geschlossen

Allerdings verwende ich jetzt die "korrekte", bewährte Methode, um auf die Datenbank zuzugreifen. Ich erhalte immer noch diesen Fehler bei einigen Funktionen, und ich kann ihn nicht für diesen Block verschwinden lassen. Hier ist mein 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 

Nun, egal was ich tue, erhalte ich: ExecuteReader erfordert eine offene und verfügbare Verbindung. Der aktuelle Status der Verbindung ist geschlossen. auf dieser Verbindung. Ich habe Funktionen mit Objekten, die in dieser Klasse das gleiche genannt werden (cmd, dr usw.), aber die Verwendung schließt sich selbst, nicht wahr?

Vorschläge willkommen :)

Antwort

14

Ich glaube, Sie die Verbindung zu öffnen vergessen haben.

es vor dieser Zeile Öffnen:

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

Verwendung -

db.Open() 
2

Sie haben vergessen, tatsächlich zu Open Verbindung:

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

Ein Grund dafür wäre, dass Ihre Verbindung könnte überhaupt nicht öffnen. Welche Ausnahme auch immer bei der "SqlConnection.Open" -Anweisung kommt, wird unterdrückt. Wenn das Problem nicht in Ihrer Anwendung liegt, kann der Server Ihnen möglicherweise keine Verbindung gewähren. Möglicherweise liegt ein Verbindungsverlust in Ihrer App oder in einer anderen Datenbank vor, die auf demselben Server gehostet wird.