[SQL2008+NET] Leer un campo Time (SQL 2008) en un SqlDataReader para obtener un TimeSpan (.NET)

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

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Published 05-11-2011 21:30 por Jose A. Fernandez