Zuriff auf SQL-Datenbank



  • hallo,
    Ich weiß nicht ob es solch ein Thema schon hier gibt, aber ich bin über die suche nicht fündig geworden!!
    Ich greife Mittels C# auf eine Datenbank zu, ist ja auch soweit kein Problem mit StoredProcedures. ABER:
    kann ich mit einem DataReader die Anzahl der Spalten in einer Tabelle feststellen?? Ich habe es mit getName() und einem Zähler versucht, aber irgendwie ohne erfolg!!
    Kann man da was besseres machen?? Bitt um hilfe

    MFG
    Freggel



  • Servus,

    der DataReader hat doch bestimmt die Eigenschaft FieldCount oder? Dann setze einfach ein SELECT * FROM Katze ab und der Rückgabewert von FieldCount wird wohl deine Anzahl von Spalten sein. Auf die Schnelle ist mir jetzt nichts besseres eingefallen.

    mfg
    Hellsgore



  • DataTable schemaTable = myReader.GetSchemaTable();
    
    foreach (DataRow myRow in schemaTable.Rows)
    {
      foreach (DataColumn myCol in schemaTable.Columns)
        Console.WriteLine(myCol.ColumnName + " = " + myRow[myCol]);
      Console.WriteLine();
    }
    

    Da Du den Reader auf der Grundlage eines SqlCommand bekommst stehen auch
    Strukturinformationen der zugrundeliegenden DB zur Verfügung!

    Die MSDN dazu



  • Danke, der Tipp mit dem FieldCount hat den gewünschten erfolg gebracht!! Anbei stelle ich den meinen Code für die "Nachwelt" 😉

    int spalten()
        {
            DBLayer db = new DBLayer();
            SqlConnection con = db.get_sqlconnection();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandTimeout = 750;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "employee_read";
            SqlDataReader dr = null;  
            try
            {
                dr = cmd.ExecuteReader();
            }
            catch (Exception ex)
            {
                throw ex;
                msg.Text = "Keine Daten verfügbar";
            }
            int z = dr.FieldCount;
            dr.Close();
            db.close();
            return z;
        }
    


  • Optimal ist dein Code nicht, da mit "throw ex" diese Funktion verlassen wird, ohne dr und db zu schließen. Auch msg.Text wird nicht gesetzt...



  • ja ich weiß, optmial ist es nicht, aber funktional!! steckt auch noch alles in entwicklung wird quasi minütlich umgebaut....


Anmelden zum Antworten