Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - MySQL Abfrageergebnis in Variable speichern


fab_se - Do 02.12.10 17:47
Titel: MySQL Abfrageergebnis in Variable speichern
Hallo Leute!

Ich habe folgendes Problem und hoffe ihr könnt mir helfen:
Ich will aus einer MySQL Datenbank die Anzahl der vorhandenen Datensätze in einer Tabelle auslesen und in einer Interger Variable speichern. Dazu habe ich bis jetzt folgenden Code geschrieben:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
string strVerbindung =  "SERVER=localhost;" +
                        "DATABASE=kontoverwaltung;" +
                        "UID=root;";

            MySqlConnection verbindung = new MySqlConnection(strVerbindung);
            verbindung.Open();

            MySqlCommand zaehlen = verbindung.CreateCommand();
            zaehlen.CommandText = "SELECT ID, COUNT(ID) from kunde";
            MySqlDataReader reader;
            zaehlen.ExecuteReader();


Ich habe schon versucht einer Integer Variable wie folgt einen Wert zuzuweisen:


C#-Quelltext
1:
int intAnzahl = reader.FieldCount();                    


In verschiedenen Code Beispielen habe ich gesehen, dass man die Tabelle auch Zeile für Zeile bzw. Feld für Feld durchgehen kann und dabei einen Zähler mit hochlaufen lassen kann, allerdings finde ich dieses Vorgehen umständlich und könnte mir vorstellen, dass sich dieses Problem auch einfacher lösen lässt. Hat jemand eine Idee?

Gruß Fabi

Moderiert von user profile iconKha: Quote- durch C#-Tags ersetzt


Th69 - Do 02.12.10 17:53

Mit "FieldCount()" erhältst du die Anzahl der Spalten, nicht der Zeilen.

Bei einem DataReader geht es nur mittels einer Schleife, um an die Anzahl zu kommen.

Einfacher ist es jedoch direkt die Datenbank zu fragen:

Quelltext
1:
select count(*) from Kunde                    

und danach dann im Code

C#-Quelltext
1:
int anzahl = (int)sqlCommand.ExecuteScalar();                    

Der Cast auf (int) ist notwendig, weil ExecuteScalar ein 'object' zurückliefert (wir wissen aber, daß bei count(*) eine Zahl zurückgeliefert wird ;-).


fab_se - Do 02.12.10 23:38

Erstmal Danke für deine Antwort.

Ich verstehe jedoch nicht was du damit meinst die Datenbank direkt zu fragen bzw. wie ich den SQL Befehl sonst einbauen soll. Denn in Zeile 9 steht ja schon drin:


C#-Quelltext
1:
zaehlen.CommandText = "SELECT ID, COUNT(ID) from kunde";                    


Und was macht der Befehl Execute.Scalar() ?
Ich finde leider keine gute Dokumentation zum Thema MySQL und C#. Die meisten beschränken sich nämlich (leider) auf das aufbauen einer Verbindung und das Schreiben in die Datenbank, nicht jedoch das Auslesen. Kann mir da eventuell jemand was empfehlen?


Th69 - Fr 03.12.10 14:35

Hallo,

einen guten Einstieg in die Datenbankprogrammierung kriegst du mit dem OpenBook http://openbook.galileocomputing.de/visual_csharp/visual_csharp_26_001.htm#mj67b3dafaf051acea5f18efd504026822
(du mußt dann bei dir nur alle SqlCommand etc. mit MySqlCommand ersetzen).

Ein weiteres Tutorial (diesmal explizit für MySql) gibt es unter http://www.codeplanet.eu/tutorials/csharp/5-verbindung-zum-mysql-server-mit-csharp.html
(auch der DataReader wird dort am Beispiel erklärt).

Oder direkt auf der MySql-Seite: http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html#connector-net-tutorials-connection