Laden...

Wie kann ich mit MySQL die Anzahl gelesener Datensätze ermitteln?

Erstellt von TigerCrow vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.723 Views
T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 6 Jahren
Wie kann ich mit MySQL die Anzahl gelesener Datensätze ermitteln?

Hallo,

habe eine wahrscheinlich Dumme Frage zu C#, MySql 🙁

wie kann ich die Anzahl gelesener Datensätze ermitteln?

in PHP gibt es den Befehl: mysqli_num_rows()

Habe z.b. den SQL Befehl: select kid,mail from kunden where name='Hugo';

und jetzt würde ich ganz gerne wissen wieviele es sind!

Danke euch ... steh wohl wieder daneben.

Gruß
TigerCrow

T
2.219 Beiträge seit 2008
vor 6 Jahren

@TigerCrow
Wie liest du die Daten aktuell aus?
Wenn du dies mit dem DataReader machst, kannst du dies nach dem auslesen aller Zeilen selbst ermitteln.
Machst du dies über den DataAdapter, dann kannst du die Zeilen des DataTables zählen.
Wenn du nur die Anzahl ermitteln willst, dann mach eine select count(*) und lies den Wert über den DataReader aus.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 6 Jahren

hallo,

lese die Daten so:


string sql = @"select kid,mail from kunden where name='Hugo';";

     MySqlCommand cmd = new MySqlCommand(sql, DBcon);
     MySqlDataReader result = cmd.ExecuteReader();


und jetzt würde ich gerne wissen wieviele datensätze er gefunden hat 🙂

Lieben Gruß

121 Beiträge seit 2016
vor 6 Jahren

int rowCount = result.RecordCount;
T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 6 Jahren

Fehlermeldung: mysqldatareader kennt diese definition nicht 🙁

Aber Danke Dir für den Anstoß 🙂

result.FieldCount

ist es 🙂

Danke

16.806 Beiträge seit 2008
vor 6 Jahren

Man sieht genug Beispiele dazu, wenn man in Google einfach nur nach MySqlDataReader count sucht.

int rowCount = 0;
using (SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader())
{
   while (mySqlDataReader.Read())
   {
      rowCount++;
   }
}
T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 6 Jahren

count brauche ich net

H
523 Beiträge seit 2008
vor 6 Jahren

Dir ist aber klar, dass FieldCount() nicht die Anzahl der Datensätze sondern die Anzahl der Spalten zurückgibt? Siehe Doku

FieldCount
Gets the number of columns in the current row.

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 6 Jahren

shit stimmt 🙁

T
2.219 Beiträge seit 2008
vor 6 Jahren

@TigerCrow
Wenn du die Daten eh einliest, dann speichere diese in einer Liste und hol dir die Menge über List.Count
Kann nicht verstehen, wo dein Problem liegt?
Wenn du die Daten nicht über die DB per select count zählen willst, dann lädst du ja schon alle Daten ein.
Dann kannst du eben direkt die Menge "zählen".

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

3.825 Beiträge seit 2006
vor 6 Jahren

Hallo TigerCrow,

der DataReader liest erstmal nur die erste Zeile. Deshalb weiß man nicht wieviele Zeilen die Ergebnismenge hat. Also entweder alle lesen und zählen oder besser folgendes Kommando vorher absetzen (so mach ich das) :


string sql = @"select (count(*) from kunden where name='Hugo';";
MySqlCommand cmd = new MySqlCommand(sql, DBcon);
MySqlDataReader result = cmd.ExecuteReader();

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

D
985 Beiträge seit 2014
vor 6 Jahren

MySQL hat mysql_affected_rows() was immer die Anzahl der betroffenen Datensätze vom zuletzt ausgeführten Statement (in der Session) liefert.

Also führt man das SELECT Statement aus und fragt direkt daran nochmal nach den affected rows.

16.806 Beiträge seit 2008
vor 6 Jahren

Davon abgesehen, dass der aktuelle MySql Befehl mysqli_affected_rows heissen würde, bezieht sich affected rows nur auf schreibende Operationen. Deswegen auch der Name affected.
Wenn man das auf ein Select laufen lassen will, dann ist es mysqli_num_rows

D
985 Beiträge seit 2014
vor 6 Jahren

Nein.
Nein.
Kann man, muss man aber nicht und heisst zudem mysql_num_rows()

27.8.7.1 mysql_affected_rows

Da steht alles Wesentliche erklärt.

For SELECT statements, mysql_affected_rows() works like mysql_num_rows().

PS: Diese mysqli_* Befehle funktionieren z.B. bei PHP (PHP: Mysqli Manual). Direkt auf dem MySQL Server aufgerufen verursachen die nur ein Stirnrunzeln

16.806 Beiträge seit 2008
vor 6 Jahren

Bei der mysqli-Sache schein ich meiner aktuellen PHP-Muss-Nähe auf den Leim gegangen zu sein.
Aber affected_rows bezieht sich definitiv nicht auf ein Result Set, sondern num_rows; interessante Weiche für SELECT. Passt zum Rest (Ironie).