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:
- 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 :-).
- 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)