2012-03-15 29 views
5

No estoy seguro de qué estoy haciendo exactamente mal, ¿alguien puede corregirlo, por favor? Necesito determinar el tipo de columna recuperada de una base de datos de SQL Server usando C#.Obtener el tipo de datos de una columna de SQL Server con C#

Say, tengo esto:

SqlConnection cn = new SqlConnection("Sql Connection String"); 
SqlCommand cmd = new SqlCommand("SELECT * FROM [TableName]", cn); 
SqlDataReader rdr = cmd.ExecuteReader(); 

while (rdr.Read()) 
{ 
    for (int c = 0; c < rdr.VisibleFieldCount; c++) 
    { 
     System.Type type = rdr.GetFieldType(c); 

     //So can I do this? (Pseudo-code) 
     //switch(type) 
     //{ 
     //case string: 
     //case int: 
     //case DateTime: 
     //etc. 
     //} 
    } 
} 
+1

¿Hay una razón por la que no se utiliza un contexto? ¿Por qué no usas LinqToSql o Entity Framework? – Mathieu

+0

Sí. No sé lo que son. ¿Tienes un enlace que pueda verificar? – ahmd0

+0

Echa un vistazo a esta pregunta relacionada: http://stackoverflow.com/questions/258840/how-should-i-get-started-learning-about-ado-net-entity-framework – Mathieu

Respuesta

10

Usted puede hacer lo siguiente:

/* ... code .... */ 

System.Type type = rdr.GetFieldType(c); 

switch (Type.GetTypeCode(type)) 
{ 
    case TypeCode.DateTime: 
     break; 
    case TypeCode.String: 
     break; 
    default: break; 
} 

/* ... code .... */ 
+0

Gracias , tipo. Funciona, excepto en dos casos: cuando tengo un UNIQUEIDENTIFIER y tipos de datos BINARY. Ambos se devuelven como Objeto, cuando deberían ser Guid y Byte []. ¿Alguna idea de cómo manejar eso? – ahmd0

+0

No conozco una forma de evitarlo, excepto para analizar el valor ... – xandercoded

+0

@ ahmd0: 'if (type == typeof (System.Guid))' por ejemplo. – Guvante

Cuestiones relacionadas