Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Do 03.11.11 10:38 
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:

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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.:
ausblenden 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:
ausblenden SQL-Anweisung
1:
2:
SELECT MAX(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'formulardaten'

Und dann mit ExecuteScalar() auslesen.
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: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 03.11.11 13:32 
Ich hatte gehofft, daß Dennis darauf dann alleine gekommen wäre...
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: Do 03.11.11 13:39 
Mist. Wir brauchen dringend ein Pädagogik Tag/Smilie damit ich solche Maßnahmen erkenne ;)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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: