C# MySQL select 2 tabllen 1 while.

Status
Niet open voor verdere reacties.

Tomboman

Gebruiker
Lid geworden
15 feb 2013
Berichten
32
Ik heb het volgende stukje code:

Code:
 using (MySqlCommand command = new MySqlCommand("SELECT * FROM logs, gebruikers WHERE logs.naarid='"+persoonId+"'", connection))
                {
                    MySqlDataReader reader = command.ExecuteReader();

                    int i = 0;
                    while (reader.Read())
                    {
                        string datum = reader.GetString(2);
                        int bedrag = reader.GetInt32(3);

                        dataGridView1.Rows.Add();
                        int RowIndex = dataGridView1.RowCount - 1;
                        DataGridViewRow R = dataGridView1.Rows[RowIndex];
                        R.Cells["Naar"].Value = reader.GetString(6);
                        R.Cells["Datum"].Value = datum;
                        R.Cells["Bedrag"].Value =
                        "€" + String.Format("{0:#,###}",
                        Convert.ToDouble(
                            bedrag.ToString()
                        ));

                        i++;
                    }
                }

Maar in mijn query selecteer ik nu 2 tabellen.
Dat doe ik omdat in mijn tabel logs een nummer staat, en in tabel gebruikers het zelfde nummer + een naam staat.

Nu word mijn query goed uitgevoerd, maar mijn while 2 keer.
(ik heb 2 gebruikers en 1 logs). Nu wil ik dat die while wordt uitgevoerd voor de logs, en dat ik dus maar 1 resultaat krijg.
Hoe kan ik dit goed maken?

Ook heb ik een paar keer het volgende stukje: reader.GetString(6);
Na staat hiervoor de 6 van het nummer (van een kolom in een tabel).
Kan ik dit ook op één of andere manier vervangen door een naam? (zodat dit duidelijker is en makkelijker aan te passen is)

Kan iemand me helpen met de bovenstaande 2 punten?
 
Je programma gaat tweemaal door je while-lus omdat je query twee rijen oplevert. Je select levert namelijk het cartesisch product van de tabellen gebruikers en logs. Dat wil zeggen dat je query alle rijen van gebruikers (2 stuks) combineert met alle rijen van logs (1). Als je gebruikers 5 rijen zou bevatten en je logs 3 dan zou je 15 keer door de while-lus gaan.

Wat je moet doen is de where clause uitbreiden zodat alleen de rijen uit gebruiker en logs geselecteerd worden die bij elkaar horen. Bijvoorbeeld:

Code:
select *
from   logs
,      gebruikers
where  logs.id = gebruikers.id
and    logs.naarid = 'personid'

Op je tweede vraag heb ik helaas geen antwoord.

Het formateren van je bedrag kan overigens een stuk eenvoudiger:

Code:
R.Cells["Bedrag"].Value = String.Format("€{0:#,###}", bedrag);

Succes,
Erik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan