2016-03-23 15 views
-1

ich auf einer Web-Anwendung am wiorking, wenn ich Daten aus der Datenbank i die folgenden Fehler holen klicken Sie auf zu bekommen:"ExecuteReader benötigt eine offene und verfügbare Verbindung. Der aktuelle Status der Verbindung ist geschlossen." auf WebForm

ExecuteReader erfordert eine offene und verfügbare Verbindung. Der aktuelle Status der Verbindung ist geschlossen.

ExecuteReader requires an open and available Connection. The connection's current state is closed.

Ich erkläre meine Verbindung auf einer separaten Klasse wie die folgenden:

public Database() 
{ 
    valid = false; 

    using (connection = new SqlConnection(connectionString))  
    {     
     connection.Open(); 
    }  
} 

Wo lese ich den Fehler:

enter image description here

und ich nenne es aus einem Webformular. Warum bekomme ich diesen Fehler, wenn die Verbindung bereits geöffnet ist (ich benutzte odbc Verbindung und es funktioniert gut, aber die SqlConnection funktioniert nicht)

Was ist der Grund?

+2

ich keinen Anruf 'ExecuteReader' sehen: bitte Code anzeigen, der das Problem neu erstellt – Richard

+0

Könnten Sie bitte den Code posten, wo Sie tatsächlich die Ausnahme bekommen? Es wäre auch schön, wenn Sie den Code, den Sie veröffentlichen, aufräumen könnten (z. B. das Entfernen der auskommentierten Teile). –

+0

'Warum bekomme ich diesen Fehler, wenn die Verbindung bereits offen ist 'Ich stimme zu, das ist unglaublich rätselhaft, da es keinen tatsächlichen Aufruf oder sogar Instantiierung eines' SqlDataReader' gibt. – CodingGorilla

Antwort

1

SQL-Verbindung geöffnet ist innerhalb von nur Rahmen mit:

using (var connection = new SqlConnection(connectionString)) { 
    connection.Open(); // open here 
    ... 
    } // close here 

So Ihre Befehl setzen (s) in den using -umfang:

using (var connection = new SqlConnection(connectionString)) { 
    connection.Open(); 

    // command creation and execution should be within connection "using" scope 
    using (var q = new SqlCommand()) { 
     q.Connection = connection; 
     ... 

     // reader should be within command "using" scope 
     using (var reader = q.ExecuteReader()) { 
     ... 
     } 
    } 
    ... 
    } // close here 
Verwandte Themen