Saltar al contenido

¿Cómo puedo obtener los nombres de campo de una tabla de base de datos?

Puede que se de el caso de que halles alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

Usar IDataReader.GetSchemaTable()

Aquí hay un ejemplo real que accede al esquema de la tabla y lo imprime sin formato y en XML (solo para ver qué información obtiene):

class AccessTableSchemaTest

    public static DbConnection GetConnection()
    
        return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\Test.mdb");
    

    static void Main(string[] args)
    
        using (DbConnection conn = GetConnection())
        
            conn.Open();

            DbCommand command = conn.CreateCommand();
            // (1) we're not interested in any data
            command.CommandText = "select * from Test where 1 = 0";
            command.CommandType = CommandType.Text;

            DbDataReader reader = command.ExecuteReader();
            // (2) get the schema of the result set
            DataTable schemaTable = reader.GetSchemaTable();

            conn.Close();
        

        PrintSchemaPlain(schemaTable);

        Console.WriteLine(new string('-', 80));

        PrintSchemaAsXml(schemaTable);

        Console.Read();
    

    private static void PrintSchemaPlain(DataTable schemaTable)
    
        foreach (DataRow row in schemaTable.Rows)
        
            Console.WriteLine("0, 1, 2",
                row.Field("ColumnName"),
                row.Field("DataType"),
                row.Field("ColumnSize"));
        
    

    private static void PrintSchemaAsXml(DataTable schemaTable)
    
        StringWriter stringWriter = new StringWriter();
        schemaTable.WriteXml(stringWriter);
        Console.WriteLine(stringWriter.ToString());
    

Puntos de interés:

  1. No devuelva ningún dato dando una cláusula where que siempre se evalúe como false. Por supuesto, esto solo se aplica si no está interesado en los datos :-).
  2. Use IDataReader.GetSchemaTable() para obtener un DataTable con información detallada sobre la tabla real.

Para mi tabla de prueba, el resultado fue:

ID, System.Int32, 4
Field1, System.String, 50
Field2, System.Int32, 4
Field3, System.DateTime, 8
--------------------------------------------------------------------------------

  
    ID
    0
    4
    10
    255
    System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    3
    false
    true
    false
    false
    false
    false
    false
  
  [...]

esto funcionará en el servidor sql 2005 y superior:

select * from INFORMATION_SCHEMA.COLUMNS 
where TABLE_Name='YourTableName'
order by ORDINAL_POSITION

Ejecute esta consulta:

select top 1 *
From foo

y luego recorra los campos de la lista (y los valores devueltos) en el conjunto de resultados para obtener los nombres de los campos.

Aquí tienes las reseñas y calificaciones

Si te ha sido útil nuestro post, sería de mucha ayuda si lo compartes con el resto seniors y nos ayudes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *