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 user profile iconKha: 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: