Autor Beitrag
FuttlTobi
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 28.02.12 11:57 
Hallo ich hätte eine Frage und zwar ich möchte aus einer Access Datenbank die Anzahl der Fragen einer Kategorie abfragen mein Code lautet:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
        public int DatenbankAbfrageAnzahl()//ermittelt wie viele Fragen in der DB gespeichert sind also wie viele Zeilen die Tabelle hat
        {
            int anz=0;
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Max\4.Klasse\PPM\Rette_die_Million\Rette_die_Million_3.0\DB_Fragen.mdb");
            con.Open();

            string strSQL = "SELECT COUNT(*) FROM Fragen WHERE kategorie=" + kategorie;//SQL-Statement

            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                try
                {
                    anz = Convert.ToInt32(dr[0]);
                    
                }
                catch (OleDbException)//Wenn Datenbank nich gefunden wird
                {
                    MessageBox.Show("Datenbank nicht vorhanden!");
                }
            }
            dr.Close();
            con.Close();

            return anz;
        }

Es wird aber immer eins returnt und ich komm nicht drauf warum!

Can u help mi?

yours Futtl di Tuttl ;)

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 28.02.12 12:09 
Hallo FuttlTobi

Wenn Du nur die Anzahl der Zeilen erhalten willst, kannst Du die Variable in der while-Schleife einfach hochzählen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
anz = 0;
while (dr.Read()) 

    anz++; 
}

_________________
Gruss
mats74
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 28.02.12 12:15 
Deine Kategorie enthält nur eine Frage?

Vielleicht erstmal den Code ein wenig gerade rücken. Bei deiner Abfrage wird genau ein Datensatz mit einer Spalte returned ein DataReader ist da überflüssig. Ein DBCommand hat dafür eine ExecuteScalar Methode.
Ein
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public int DatenbankAbfrageAnzahl(string kategorie)

    using(OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Max\4.Klasse\PPM\Rette_die_Million\Rette_die_Million_3.0\DB_Fragen.mdb"))
    {
        con.Open(); 
        using(OleDbCommand cmd = new OleDbCommand("SELECT COUNT(*) FROM Fragen WHERE kategorie=" + kategorie, con); 
        {
            return Convert.ToInt32(cmd.ExecuteScalar());
        }
    }
}

sollte vollkommen ausreichen. Dein Exceptionhandling (habe ich mal explizit weggelassen) solltest du nochmal überdenken du kapselst damit nur den Convert.ToInt32 Aufruf. Der wird sicher nie eine OleDbException auslösen.