Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Wie die Anzahl der Spalten in Datenbanktabelle ermitteln?
DennisXX - Do 03.11.11 10:38
Titel: Wie die Anzahl der Spalten in Datenbanktabelle ermitteln?
Hallo !
Kann mir vielleicht jemand von euch sagen, wie ich dynamisch die Anzahl der Spalten als numerischen Wert einer bestimmten Datenbanktabelle ermiteln kann?
Ich habe dazu bisher die folgende Methode verfasst:
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: 29: 30:
| public int erfassenAnzahlDatenbankFelder(SqlConnection connection) { SqlConnection connectionwerte = connection; int intAnzahlDatenbankFelder = 0; int intAnzahlReaderFelder;
SqlCommand command = connection.CreateCommand(); command.CommandText = "SELECT column_name " + "FROM INFORMATION_SCHEMA.COLUMNS " + "WHERE TABLE_NAME = 'Formulardaten'";
SqlDataReader Reader; connectionwerte.Open();
Reader = command.ExecuteReader();
intAnzahlReaderFelder = (Reader.FieldCount) - 1;
while (Reader.Read()) { for (int i = 0; i < intAnzahlReaderFelder; i++) { intAnzahlDatenbankFelder = intAnzahlDatenbankFelder + 1; } }
connectionwerte.Close();
return intAnzahlDatenbankFelder; } |
Leider liefert mir das Ausdruck " intAnzahlReaderFelder = (Reader.FieldCount) - 1;" keine Zahl zurück. Wie genau kann ich jetzt die Anzahl der Spalten ermitteln?
Grüße
Dennis
Moderiert von
Kha: Topic aus C# - Die Sprache verschoben am Do 03.11.2011 um 09:55
Th69 - Do 03.11.11 11:56
Hallo Dennis,
die Anzahl der Datensätze in der Tabelle gibt dir die Anzahl Spalten zurück, d.h.:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| int anzahl = 0;
while (Reader.Read()) { anzahl++; } |
P.S: Alternativ kannst du auch die größte 'ORDINAL_POSITION' ermitteln:
SQL-Anweisung
1: 2:
| SELECT MAX(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'formulardaten' |
Und dann mit ExecuteScalar() auslesen.
Ralf Jansen - Do 03.11.11 12:48
Zitat: |
P.S: Alternativ kannst du auch die größte 'ORDINAL_POSITION' ermitteln: |
Nicht das da was anderes rauskommt oder schneller wäre aber ein simples Count(*) anstatt MAX(ORDINAL_POSITION) empfinde ich da als etwas direkter ;)
Zitat: |
Leider liefert mir das Ausdruck " intAnzahlReaderFelder = (Reader.FieldCount) - 1;" keine Zahl zurück. |
Fieldcount sollte auch erst nach dem ersten Reader.Read() etwas sinnvolles enthalten. Macht hier aber nix da deine Abfrage ja genau ein Field (eben column_name) enthält. Das bekommst du noch im Kopf ausgerechnet ;) Wenn es denn helfen würde die Spaltenzahl der Abfrage zu kennen :?:
Th69 - Do 03.11.11 13:32
Ich hatte gehofft, daß Dennis darauf dann alleine gekommen wäre...
Ralf Jansen - Do 03.11.11 13:39
Mist. Wir brauchen dringend ein Pädagogik Tag/Smilie damit ich solche Maßnahmen erkenne ;)
Th69 - Do 03.11.11 20:35
Hallo Ralf,
etwas besseres ist mir auf die Schnelle nicht eingefallen, warum ich nicht gleich auf count(*) gekommen bin :lol:
Aber ein bißchen Pädagogik wäre auch nicht schlecht - wir könnten uns ja auf ein Geheim-Smilie dafür einigen :wink:
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!