C# + Oracle --> SELECT * FROM ...

Servus!

Ich stehe vor einem Problem welches wohl keines sein sollte, leider finde ich auch bei verschiedenen Tutorials keine Antwort.

Wie finde ich heraus wieviele Ergebnisse (Spalten) ein "SELECT * FROM" hat? Die Anzahl kann von 1 bis n alles sein und es soll jedes Ergebnis ausgegeben werden. Wie programmiere ich die rot formatierte Zeile dynamisch?

Code:
 using (OracleConnection conn = new OracleConnection(connectionstring))
            {
                conn.Open();
                using (OracleCommand comm = new OracleCommand(sql, conn))
                {
                    using (OracleDataReader rdr = comm.ExecuteReader())
                    {
                        while (rdr.Read())
                        {
[COLOR=Red]                            Console.WriteLine(rdr[0]);[/COLOR]

                        }
                        rdr.Close();
                    }
                }
                conn.Close();
Ich habe schon viel mit Datenbanken gemacht aber bisher nur mit PHP und dort gibt es ein mysql_num_fields() und mit einer kleinen for-schleife lässt man einfach so lange einen Counter erhöhen bis das Array von 0 bis n ausgegeben ist ... sowas finde ich in C# nicht. Es gibt nur ein OracleDataReader.nextResult aber das scheint etwas anderes zu machen als die nächste Spalte auszugeben ...

Edit: Hatte zuerst das Problem etwas falsch beschrieben, falls jemand es gerade gelesen hat ...
 
Zuletzt bearbeitet:
wenn ich mich nicht irre, hilft dir das hier weiter ...

Code:
for(int idx=0;idx<rdr.FieldCount;idx++)
{
Console.WriteLine("Feld {0} ist vom Typ {1} und hat den Wert {2}",idx,rdr.getFieldType(idx),rdr[idx]);
}
 
Danke für die rasche Antwort! Das rdr.FieldCount drüfte ich wohl übersehen haben, mea culpa :(

Eine Sache gehört noch geändert:

getFieldType gibt es nicht, das heißt GetDataTypeName :wink: Zumindest funktioniert nur das bei mir ...

funktionierender Code:
Code:
                        while (rdr.Read())
                        {
                            for (int idx = 0; idx < rdr.FieldCount; idx++)
                            {
                                Console.WriteLine("Feld {0} ist vom Typ {1} und hat den Wert {2}", rdr.GetName(idx), rdr.GetDataTypeName(idx), rdr[idx]);
                            }
                            Console.WriteLine("_____________");

                        }
                        rdr.Close();
Edit: So ist der Code noch schöner
 
Zuletzt bearbeitet:
also "GetFieldType(int)" sollte es seit .net 2.0 geben, und es sollte dir einen System.Type geben ... ansonsten hast du einen komischen OracleDataReader ...
 
Es gibt diese Funktion aber wenn ich es hinschreibe wird es rot unterwellt und imho macht doch GetDataTypeName das selbe :confused:
 
naja ... fast ... das eine ist ein Type ... das andere ein String mit dem Namen des Typs ... aber vermutlich hinreichend
 
Vielleicht ist genau das das Problem: ein Type müsste erst in einen String konvertiert werden bevor es per Console.WriteLine ausgegeben werden kann?!

rdr.getFieldType(idx).ToString(); sollte also funktionieren?! Ist in dem Fall aber egal weil das Ergebnis das selbe ist ;)

Ich habe von C# nicht so viel Ahnung, habe bisher fast nur mit PHP programmiert und da ist vieles einfacher (z.B. das automatische Typecasting) bzw. muss man da etwas anders denken weil es eine Skriptsprache ist.
 
WriteLine(...) akzeptiert einen formatstring sowie eine quasi beliebige anzahl an objekten mit denen es die platzhalter im formatstring auffüllt ... objekte werden hierfür automatisch in text umgesetzt ... im zweifel mittels Object.ToString()
 
Zurück
Oben