Blog Recent Posts

This Blog

Syndication

Search

Tags

News

Community

Email Notifications

Archives

Blogs recomendados

Sitios

Blog Archive List

Aporte - Donación

Si el contenido te fue de utilidad puedes donar

PayPal. La forma rápida y segura de pagar en línea.

 

[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

Published 11/5/2011 21:30 por José A. Fernández

Comparte este post: