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



BeitragVerfasst: Di 30.08.11 08:57 
Hallo zusammen !

Kann mir vielleicht jemand von euch sagen, wie ich die Anzahl der Spalten einer beliebigen Datenbanktabelle und die Spaltennamen / Spaltenbezeichnung von einem C Sharp Programm aus aufrufen kann? Gibt es auch die Möglichkeit, die Anzahl der Datensätze aus einer Datenbanktabelle auslesen zu können?

Viele Grüße
Dennis
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 30.08.11 09:28 
naja holst dir die Tabelle (zum Beispiel Select * from Test)
mit einem (bei Oracle) OracleDataReader
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
while(reader.Read())
{

//reader.FieldCount-->Anzahl der Spalten
}


wenn du die Werte in eine DataTable lädst( mithilfe des DataAdapters)
kannst du die Spaltennamen ermittel
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
string[] spaltenstrings=new string[datatable.Columns.Count]
for(int i=0;i<datatable.Columns.Count;i++)
{
  spaltenstring[i]=datatable.Columns[i].ColumnName;
}

(eventuelle syntaxfehler nicht ausgeschlossen ;)
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 30.08.11 09:35 
Die von dir verwendete konkrete DBConnection Klassen Implementierung hat eine GetSchema Methode um Schemainformationen aus der Datenbank abzurufen. Zwischen den Schemainformationen (die sind vom Typ der Datenbank und vom Typ der Zugriffsmethode abhängig) solltest du auch die gesuchten Information finden können.

Zum Auslesen der Anzahl der Datensätze tut es ein einfaches SQL 'select count(*) from MeinLieberTabellenName'
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 30.08.11 09:57 
Hallo noch einmal !

Besten Dank für die Hilfe !

Wenn ich jetzt alle Spaltennamen in einem Array abgelegt habe (z.B. in einer Methode), wie genau muss ich den Methodenkopf / Rückgabewert deklarieren, wenn ich ein Array zurückgeben möchte?

Mein Ansatz,d er leider noch nicht funktioniert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public string[] getNameColumn(){

   .....C# Kode

   return array[];

}


Was mache ich da falsch?

Viele Grüße
Dennis
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 30.08.11 10:09 
Problem hat sich erledigt !!!
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 30.08.11 11:42 
Hallo zusammen !

ich habe noch einmal eine Frage wegen einem Stückchen Code, das ich geschrieben habe.

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 string[] getNameOfDatabaseColumn(String DatabaseTable)
        {
            string[] strColumns;
            //Connection String lasse ich jetzt mal weg
            String SQL = "SELECT * FROM " + DatabaseTable;

            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                connection.Open();

                SqlCommand command = new SqlCommand();
                command.CommandType = CommandType.Text;
                command.Connection = connection;
                command.CommandText = SQL;

                DataTable dtbCurrentDatabaseTable = new DataTable();
                dtbCurrentDatabaseTable.TableName = DatabaseTable;

                strColumns = new string[dtbCurrentDatabaseTable.Columns.Count];

                for (int i = 0; i < dtbCurrentDatabaseTable.Columns.Count; i++)
                {
                    strColumns[i] = dtbCurrentDatabaseTable.Columns[i].ColumnName;
                }
            }

            return strColumns;
        }


Hier wird keine For Schleife durchlaufen und mittels strColumns = new string[dtbCurrentDatabaseTable.Columns.Count];
kein Array erzeugt. Wo genau mache ich hier einen Fehler?

Ich vermute das die Zeilen

DataTable dtbCurrentDatabaseTable = new DataTable();
dtbCurrentDatabaseTable.TableName = DatabaseTable;

nicht korrekt sind. Der String DatabaseTable enthält den namen einer Datenbanktabelle.


Viele Grüße
Dennis
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 30.08.11 12:05 
a.) Du führst dein SqlCommand nicht aus
b.) Du hast keinen Code der die Daten in deine DataTable überführt. Deine Datatable ist also immer leer.

Beides könntest du mit Hilfe eines SqlDataAdapters erledigen.
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 30.08.11 12:16 
Hallo !

Ok hiermit führe ich den SQL Command aus:

SqlDataAdapter = command.ExecuteReader;

Aber leider funktioniert das nicht.
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 30.08.11 12:33 
Zitat:
SqlDataAdapter = command.ExecuteReader;


Du verwechselst DataReader mit DataAdapter ;)

Der SqlAdapter verwaltet eigentlich selbst schon einen Satz von Select, Insert, Update, Delete Kommandos damit man eine DataTable aus der Datenbank und Änderungen wieder zurück in die Datenbank bekommt. Da du schon ein Kommando zum heranholen der Daten hast kannst du das einfach einem neuen SqlAdapter (im Konstruktor) übergeben.
ausblenden C#-Quelltext
1:
SqlDataAdapter adapter = new SqlDataAdapter(command);					

Der DataAdapter hat dann eine Fill Methode um das Ergebnis dieses Kommandos in die DataTable zu überführen.
ausblenden C#-Quelltext
1:
adapter.Fill(dtbCurrentDatabaseTable);					
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 30.08.11 12:48 
Das hat hervorragend geklappt, danke dafür!

Wie genau erarbeitest du dir solche Lösungswege eigentlich? Nur durch das betrachten der MSDN Doku? Diese erschlägt einen fast immer finde ich und man sucht dennoch die Nadel im heuchaufen.

Viele Grüße
Dennis
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 30.08.11 13:04 
Zitat:
Wie genau erarbeitest du dir solche Lösungswege eigentlich? Nur durch das betrachten der MSDN Doku? Diese erschlägt einen fast immer finde ich und man sucht dennoch die Nadel im heuchaufen.


Erfahrungssache oder manche würden auch von Intuition sprechen. Irgendwann entwickelt man ein Gefühl wie die Dinge in der Umgebung (hier .Net) funktionieren die man verwendet. Ich muss natürlich auch wie alle hier schonmal die sprichwörtliche Nadel suchen aber die Erfahrung/Intuition sorgt dafür das man meist eine gute Vorstellung hat wie die aussehen könnte und wo sie dann liegen müsste ;) Wenn ich mal behaupten darf das du Anfänger bist dann wird es ab dem Punkt für dich spürbar einfacher werden wenn du die Fragestellung zu deinem Problem richtig stellen kannst (für dich selbst nicht für uns). Dann sollte auch die Hilfe anfangen wirklich helfen zu können.