Hallo ich benutze MYSQL und programmiere C#.
Ich hab jetzt schon hier im Forum gesuchen und probier aber mein Problem geht nicht weg.
Ich möchten Daten aus einer Datenbank abfragen aber es wird immer nur der erste Eintrag den er findet angezeigt obwohl es mehr geben müsste.
Mein Code lautet bis jetzt:
MySqlCommand command4 = connection.CreateCommand();
command4.CommandText = "SELECT * FROM eigenschaften WHERE M_ID ='" + modellid + "' LIMIT 0, 30";
connection.Open();
string tiefe; ;
tiefe = Convert.ToString(command4.ExecuteScalar());
label11.Text = tiefe;
Reader2.Close();
Reader2 = command4.ExecuteReader();
while (Reader2.Read())
{
richTextBox1.Text = Reader2.GetString("E_ID") + (" ") + Reader2.GetString("M_ID") + (" ") + Reader2.GetString("Ausstattungsvariant") +
(" ") + Reader2.GetString("PS") + (" ") +
Reader2.GetInt16("sitzplaetze") + (" ") +
Reader2.GetInt16("tueren") + (" ") +
Reader2.GetInt16("Baujahr") +
(" ") + Reader2.GetInt16("Preis");
Ich hoff es kann mir jemand helfen. Bin schon am verzweifeln.
Danke schon mal!
Hallo,
wie es aussieht schließt du den Reader, bevor du zu lesen beginnst ...
Reader2.Close();
while (Reader2.Read())
{
......
}
probiere, das "Reader2.Close();" nach deinem Read, also nach der while Schleife zu platzieren.
LG,
Ron
programmers do confuse halloween with christmas, because OCT 31 == DEC 25.
Hab ich gemacht. Hab aber das gleiche problem. Er gibt mir immer nur den ersten Eintrag aus leider:
MySqlCommand command4 = connection.CreateCommand();
command4.CommandText = "SELECT * FROM eigenschaften WHERE M_ID ='" + modellid + "' LIMIT 0, 30";
connection.Open();
int tiefe; ;
tiefe = Convert.ToInt16(command4.ExecuteScalar());
int tiefe2 = 0;
Reader2 = command4.ExecuteReader();
Reader2.Read();
while (Reader2.Read())
{
richTextBox1.Text = Reader2.GetString("E_ID") + (" ") + Reader2.GetString("M_ID") + (" ") + Reader2.GetString("Ausstattungsvariant") +
(" ") + Reader2.GetString("PS") + (" ") +
Reader2.GetInt16("sitzplaetze") + (" ") +
Reader2.GetInt16("tueren") + (" ") +
Reader2.GetInt16("Baujahr") +
(" ") + Reader2.GetInt16("Preis");
tiefe2++;
Reader2.NextResult();
}
Reader2.Close();
Immer diese wilden "Stringkaskaden" ...
Schau dir doch mal Parameter an
MySqlCommand command4 = connection.CreateCommand();
command4.CommandText = "SELECT * FROM eigenschaften WHERE M_ID = @modellid LIMIT 0, 30"; //* bitte durch Tupelliste ersetzen
command4.Parameters.Add("@modellid", modellid);
connection.Open();
label11.Text = Convert.ToString(command4.ExecuteScalar());
MySqlReader Reader2 = command4.ExecuteReader();
while (Reader2.Read())
{
//wilder Konstrukt, aber bitte nicht nur den letzen Datensatz in die RichTextBox packen ... (btw Reader2.NextResult(); ... unnötig)
}
Reader2.Close();
while (Reader2.Read()) { richTextBox1.Text = Reader2.GetString("E_ID") + (" ") + Reader2.GetString("M_ID") + (" ") + Reader2.GetString("Ausstattungsvariant") + (" ") + Reader2.GetString("PS") + (" ") + Reader2.GetInt16("sitzplaetze") + (" ") + Reader2.GetInt16("tueren") + (" ") + Reader2.GetInt16("Baujahr") + (" ") + Reader2.GetInt16("Preis"); tiefe2++; Reader2.NextResult(); } Reader2.Close();
Alles klar, wie du das machst, hab ichs noch nie gemacht, aber stells dir mal die Tabelle so vor (ist jetzt ein Beispiel):
[0] [NAME]
[1] [ADRESSE]
[2] [STRAßE]
... wenn du jetzt 5 Einträge hast sieht das so aus:
while (Read.Read())
{
textBox1.Text = Reader.GetString(0) => Name
textBox2.Text = Reader.GetString(1) => Adresse
textBox3.Text = Reader.GetString(2) => Straße
}
ich bin mir nicht sicher, ob deine Variante funktioniert,
also probier's mal so!
Er gibt dir dann quasi von allen fünf Einträge Name, Adresse, Straße zurück ... (immer Stelle 0, 1, 2)
LG,
Ron
programmers do confuse halloween with christmas, because OCT 31 == DEC 25.
@Bennibaer87:
[Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
[Artikelserie] SQL: Parameter von Befehlen
Und wenn du in deiner Schleife auch den text jedesmal überschreibst, kann da am ende auch nur ein Datensatz drin stehen.