Si estas accediendo a un SQL SERVER 2008 y utilizando uno de sus nuevos tipos de datos como el Time veras que no es fácil leerlo con un SqlDataReader. La idea es obtener el valor del Time (SQL) que en .NET es un tipo de dato TimeSpan.
Si estas pensando hacer esto! olvídalo…
TimeSpan tiempo = (TimeSpan)reader["tiempo"];
Ir a las fuentes (ayuda a MSDN)
Investigando un poco di con método GetTimeSpan del SqlDataReader
Para los curiosos:
Si utilizas el tipo de dato Time(de SQL 2008) se mapea a un tipo de datos TimeSpan de .NET.
Si vemos el articulo Asignar tipos de datos de SQL Server (ADO.NET) vemos que para obtener este valor tenemos un método GetDateTime del SqlDataReader
Pero luego descubrí el GetTimeSpan
Obteniendo el valor de campo Time…
- Para obtener el valor del Time (SQL) que en .NET es un tipo de dato TimeSpan utilizamos el método GetTimeSpan del SqlDataReader, que recibe la posición de la columna, si es la columna 3, el índice es 2… ejemplo:
TimeSpan horaTimeSpan = reader.GetTimeSpan(2);
- Podemos mejorar agregando el método GetOrdinal para obtener el índice de la columna si tenemos el nombre
TimeSpan horaTimeSpan = reader.GetTimeSpan(reader.GetOrdinal("hora")); hora.Text = horaTimeSpan.ToString("HH:mm");
NOTA 1: Como dice la ayuda en MSDN se debería antes verificar si IsDBNull la columna del reader o sino la conversión genera una excepción
NOTA 2: Dar formato al TimeSpan “para que quede legible por nosotros, los humanos” 😉
Espero que te sirva de ayuda o guía.
Enlaces
- Time (Transact-SQL)
Define una hora de un día. La hora no distingue la zona horaria y está basada en un reloj de 24 horas. - Tipos de datos y funciones de fecha y hora (Transact-SQL)
- SqlDataReader.GetTimeSpan (Método)
Recupera el valor de la columna especificada como objeto TimeSpan.
http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqldatareader.gettimespan.aspx
- Asignar tipos de datos de SQL Server (ADO.NET)
- SqlDataReader.GetDateTime (Método)
Obtiene el valor de la columna especificada como un objeto DateTime.http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqldatareader.getdatetime.aspx
- Cadenas de formato TimeSpan estándar
http://msdn.microsoft.com/es-es/library/ee372286.aspx - Cadenas de formato TimeSpan personalizado
http://msdn.microsoft.com/es-es/library/ee372287.aspx