InvalidOperation-Exception: "Connection must be valid and open"


Saheeda

Mitglied
Hallo,

ich versuche, Daten aus einer Datenbank abzurufen, bekomme aber an der Stelle command.ExecuteReader() obige Exception.

Code:
MySqlConnection connection =
                    new MySqlConnection("server=localhost;port=3306;database=pets;uid=root");

            connection.Open();
            Console.WriteLine("Ping: "+connection.Ping());
           
            Console.WriteLine("Connected");


            MySqlCommand command = new MySqlCommand("SELECT * FROM pet");

if (connection.State == System.Data.ConnectionState.Open)
            {
            MySqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Console.WriteLine(reader.GetString("PetName"));

            }          
}
           
           
            Console.Read();

Konsolenausgabe ist:
"Ping: True
Connected"

Die Datenbank ist mit phpMyAdmin erstellt wurde, xampp läuft und zeigt mir den Port an, den ich oben eingetragen habe.
 

Saheeda

Mitglied
Danke.... das wars, ich habe nicht gesehen, dass der Konstruktor überladen ist und dachte, dass der Fehler woanders steckt....
Aber mal saublöd gefragt:
Wenn ich bei eigenen Objekten bestimmte Parameter dringend benötige, sorge ich übern Konstruktor dafür, dass auch definitiv alle Werte gesetzt werden.
Was für einen Sinn ergibt es, einen fürs Funktionieren zwingend notwendigen Parameter optional zu machen? Ich verstehe nicht so ganz, welche Idee dahinter steckt.



Kann ich den Thread irgendwie als erledigt markieren?
 

sheel

I love Asm
Den Sinn hier erkenn ich auch nicht ganz :)
Beim gleichbedeutenden PHP-Code dazu (bei einer der zwei möglichen Varianten) wird die
zuletzt verwendete Verbindung genommen, wenn man keine angibt. Aber hier funktioniert
das ja offensichtlich nicht, und die Dokumentation sagt auch nichts Genaueres...

Erledigt-Markierung: Ist gemacht.
 

Spyke

Premium-User
Manchmal will man nur den Command vorbereiten ohne gleich eine Verbindung mit angeben zu müssen.
Einen Sinn dahinter sehe ich schon.

Aber ich persönlich instanziere einen DbCommand auch nie selbst.
Sondern verwende meist von DbConnection (Basisklasse) die CreateCommand Methode welches mir je nach Verbindungstyp den passenden Command liefert.
Für Parameter dann entsprechend von DbCommand das CreateParameter.