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
@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.
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ß
Fehlermeldung: mysqldatareader kennt diese definition nicht 🙁
Aber Danke Dir für den Anstoß 🙂
result.FieldCount
ist es 🙂
Danke
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++;
}
}
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
@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.
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
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.
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Nein.
Nein.
Kann man, muss man aber nicht und heisst zudem mysql_num_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
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code