Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - einfacher DB-Zugriff funktioniert nicht
FuttlTobi - Di 28.02.12 11:57
Titel: einfacher DB-Zugriff funktioniert nicht
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:
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() { 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; OleDbCommand cmd = new OleDbCommand(strSQL, con); OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read()) { try { anz = Convert.ToInt32(dr[0]); } catch (OleDbException) { 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
Th69: C#-Tags hinzugefügt
mats74 - 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:
C#-Quelltext
1: 2: 3: 4: 5:
| anz = 0; while (dr.Read()) { anz++; } |
Ralf Jansen - 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
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!