MySql Datenbank auslesen

dumbaz28

Mitglied
Hallo!

Ich hab lange herumgespielt und habs geschafft, die Verbindung zur Datenbank (MySql in XAMPP) aufzubauen, einzutragen und auszulesen. Doch mein Problem: ich kann nur den ersten Eintrag auslesen.

Das ist mein Code zum auslesen (so klappt der erste Eintrag):
Code:
        public string auslesen(string tabelle, string spalte)
        {
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT " + spalte + " FROM " + tabelle;

            MySqlDataReader reader;
            connection.Open();
            reader = command.ExecuteReader();
            reader.Read();
            string wert = (Convert.ToString(reader.GetValue(0)));
            reader.Close();

            return wert;
        }

also mit dem Index "0" klappts, aber sobald ich "i" oder "1" etc einsetzte, klappt nichts mehr :(

ich habs auch schon so probiert:
Code:
string wert = reader.GetString(i);

mit dem Index "0" klappts auch so!

Wahrscheinlich ists nur ein kleiner Fehler, aber ich komm nicht mehr drauf.

Vielleicht habt ihr eine ganz andere Lösung mit der ich gleich in ein Array einschreiben kann? Ich sitz momentan total auf der Leitung, komm mir schon fast blöd vor.

Danke :)
 
Hi.

Der MySqlDataReader funktioniert so, dass du mit dem Aufruf von Read eine Zeile (einen Datensatz) einliest, und dann die Werte der Spalten abrufen kannst. Um zur nächsten Zeile zu kommen musst du nochmal Read aufrufen.

Um alle Datensätze zu behandeln brauchst du also eine Schleife die typischer Weise so aussieht:

C#:
while (reader.Read())
{
    string bla = reader.GetString(0);
    // etc.
}

Für weitere Infos wie du bequem Daten abfragen kannst, schau dir einfach mal ein paar ADO.net Tutorials an. Die Klassen des MySQL Connectors lassen sich gleich bedienen wie die entsprechenden Sql-Klassen die schon im .net framework enthalten sind.

lg,..
 
Du kannst anstelle eines DataReaders auch mit einem MySqlDataAdapter und einer DataTable oder einem DataSet arbeiten. Ich finde das ist intuitiver, da DataTable eine Ergebnistabelle repräsentiert und DataSet eine Sammlung von Tabellen. Man kann danach schön über die Tabelle iterieren und auch direkt die Spaltennamen und Aliase benutzen. Hier siehst du den Aufbau: http://www.tutorials.de/forum/net-web-und-kommunikation/352404-mysql-connector-best-practice.html (Ich suche noch nach Antworten ;)) und hier noch ein (triviales) Beispiel für Spaltennamen bzw. Aliase
Code:
string sql = "SELECT spalte, foo AS bar FROM tabelle";
DataTable dataTable;
//Ausführen und Ergebnis in dataTable...
foreach(DataRow dataRow in dataTable.Rows)
{
    //Zugriff auf die Ergenisse mit Aussagekräftigen Namen und nicht mit Indizes
    ....dataRow["spalte"]....
    //oder
    ....dataRow["bar"]....
}

Edit: Ich nehme das nochmal zurück. Ich kannte den MySqlDataReader bis eben gar nicht und habe mich gerade über die Unterschiede zum MySqlDataAdapter informiert.
 
Zuletzt bearbeitet:
Langsam verzweifel ich. Wahrscheinlich ists wieder nur ein kleiner Fehler, aber ich komm einfach nicht drauf.

Ich hab eine Klasse "Datenbank.cs" mit der ich bisher alles abgewickelt habe (öffnen, schließen, eintragen etc). In dieser Klasse habe ich folgende Methode in verschiedenen Variationen probiert. Doch ständig kommt der Fehler "nicht alle Codepfade geben einen Wert zurück" und "unerreichbarer Code gefunden" (i++ in der for Schleife) ich habs auch schon ohne der For-Schleife versucht.

Code:
        public string auslesen(string tabelle, string spalte)
        {
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT " + spalte + " FROM " + tabelle;

            MySqlDataReader reader;
            connection.Open();
            reader = command.ExecuteReader();

            while(reader.Read())
            {

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    string wert = reader.GetString(i);
                    //wert += reader.GetString(i);
                    return wert;
                }
            }

            reader.Close();          
        }

Vom array fang ich gar nicht erst an. Ich sitz echt auf der Leitung, dass konnte ich alles mal ansatzweise *peinlich*

Danke nochmal
 
Hallo dumbaz28,

Das Problem liegt darin, dass du nur dann einen Rückgabewert lieferst, wenn die While-Schleife verarbeitet wird.

Versuche es mal so (Achtung: Habe es nicht selber kompiliert):
Code:
        public string auslesen(string tabelle, string spalte)
        {
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT " + spalte + " FROM " + tabelle;

            MySqlDataReader reader;
            connection.Open();
            reader = command.ExecuteReader();

            // hier wert definieren
            string wert = "";

            while(reader.Read())
            {

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    wert += reader.GetString(i);
                }
            }

            reader.Close();    

            // erst hier das Return
            return wert;
        }
 
so hab ichs probiert (sagen wir mal so ähnlich, weil jetzt liest es zumindest alles aus, und davor eben nicht)

nur mehr in einen Array packen und es sollte endlich klappen.

vielen vielen dank. hab mir ja gedacht es wird mal wieder nur eine Kleinigkeit sein, die ich genau SO nicht probiert habe
 

Neue Beiträge

Zurück