[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

Microsoft Community Contributor Award 2011

image

Es grato recibir buenas noticias por correo! Y mas si es un premio.

Dear Jose,
Congratulations! We’re pleased to inform you that your contributions to Microsoft online technical communities have been recognized with the Microsoft Community Contributor Award.
The Microsoft Community Contributor Award is reserved for participants who have made notable contributions in Microsoft online community forums such as TechNet, MSDN and Answers. The value of these resources is greatly enhanced by participants like you, who voluntarily contribute your time and energy to improve the online community experience for others.
Becoming a Microsoft Community Contributor Award recipient includes access to important benefits, such as complimentary resources to support you in your commitment to Microsoft online communities…
Thank you for your commitment to Microsoft online technical communities and congratulations again!

Uno día a día esta con el “cotidiano fuego de los proyectos” y se hace tiempo para ayudar y seguir aprendiendo en los foros… donde cada uno aporta un granito de arena, para que entre todos podamos crecer y evangelizar en la tecnología que nos apasiona (y nos da dolores de cabeza).

Asi que los invito a los foros de MSDN, TechNet y Answers, para compartir, preguntar, ayudar o simplemente “mirar pasivamente”.

Gracias a Microsoft por el reconocimiento… y también por el premio; ya que además de la “distinción” tenemos acceso a una librería online con muchos libros de Microsoft Press (E-Reference Library de Safari Book Online) así que no hay impedimento para seguir formándose…

Es grato ver en Geeks.ms que Javier Torrecilla y Josué Yeray Julián Ferreiro también tienen este honor… y es mas honor para mi compartir con ellos.

 

MCC11_Logo_Horizontal_Full-color