fechas con Linq TO SQL

14/05/2010 - 20:11 por [Juanjo] | Informe spam
Hola grupo:

Tengo una tabla de una base de datos SQL SERVER que contiene un campo
DateTime, y cuando hago alguna consulta (obviamente) me devuelve un valor
para este campo dd/mm/aaaa h:mm:ss.

Yo solo quiero la fecha, Hay alguna forma de quitarle el componente hora
a la fecha?

Si tengo que representar la fecha en un campo datetimepicker, pues
todavia, pero si tienes que hacer un listado en un DatagridView queda fatal
que salga la hora.

Me da igual quitarle la hora al campo de la base de datos, en vez de
hacerlo por programacion (casi que mejor)

Muchas gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
14/05/2010 - 20:46 | Informe spam
"[Juanjo]" wrote in message
news:
Tengo una tabla de una base de datos SQL SERVER que contiene un campo
DateTime, y cuando hago alguna consulta (obviamente) me devuelve un valor
para este campo dd/mm/aaaa h:mm:ss.

Yo solo quiero la fecha, Hay alguna forma de quitarle el componente
hora a la fecha?

Si tengo que representar la fecha en un campo datetimepicker, pues
todavia, pero si tienes que hacer un listado en un DatagridView queda
fatal que salga la hora.

Me da igual quitarle la hora al campo de la base de datos, en vez de
hacerlo por programacion (casi que mejor)



Creo que tienes un pequeño error de concepto. Si las fechas en el
servidor son de tipo DATETIME, no tienen formato ninguno, sino que guardan
los datos en binario. Si te las traes a memoria con LINQ, siguen sin tener
formato ninguno, ya que se convierten a objetos del tipo System.DateTime,
que siguen siendo binarios (es un struct que tiene dentro varios int con el
número del día, el número del mes, etc.). Por lo tanto, no puedes "quitarle
la hora al campo de la base de datos", salvo que le cambies el tipo y lo
pases a varchar en lugar de datetime (o lo pases a DATE si es un Sql Server
2008). Bueno, puedes poner la hora a cero, pero eso no resolverá tu problema
en el lado cliente, ya que te seguirá mostrando la hora, aunque sea
00:00:00.
¿Por qué?¿De donde salen esos hh:mm:ss, si hemos dicho que no tiene
formato? Pues los pone el proceso de conversión que sigues cuando pasas los
datos que te ha traído Linq a los objetos que tienes en pantalla. Aquí es
donde tienes que meter tú el formato. Si estás usando databinding y no
quieres manipular los formatos con los eventos del enlace, hay un truco muy
sencillo que puedes hacer, que consiste en meter la conversión en la
sentencia LINQ:

var q = from x in contexto.tabla
select new { x.campo1, etc etc,
Fecha=x.Fecha.ToString("dd/MM/aaaa") };
DataGridView1.DataSource = q.ToList();
Respuesta Responder a este mensaje
#2 [Juanjo]
14/05/2010 - 20:54 | Informe spam
Muchas gracias, es mas o menos lo que buscaba.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:
"[Juanjo]" wrote in message
news:
Tengo una tabla de una base de datos SQL SERVER que contiene un campo
DateTime, y cuando hago alguna consulta (obviamente) me devuelve un valor
para este campo dd/mm/aaaa h:mm:ss.

Yo solo quiero la fecha, Hay alguna forma de quitarle el componente
hora a la fecha?

Si tengo que representar la fecha en un campo datetimepicker, pues
todavia, pero si tienes que hacer un listado en un DatagridView queda
fatal que salga la hora.

Me da igual quitarle la hora al campo de la base de datos, en vez de
hacerlo por programacion (casi que mejor)



Creo que tienes un pequeño error de concepto. Si las fechas en el
servidor son de tipo DATETIME, no tienen formato ninguno, sino que guardan
los datos en binario. Si te las traes a memoria con LINQ, siguen sin tener
formato ninguno, ya que se convierten a objetos del tipo System.DateTime,
que siguen siendo binarios (es un struct que tiene dentro varios int con
el número del día, el número del mes, etc.). Por lo tanto, no puedes
"quitarle la hora al campo de la base de datos", salvo que le cambies el
tipo y lo pases a varchar en lugar de datetime (o lo pases a DATE si es un
Sql Server 2008). Bueno, puedes poner la hora a cero, pero eso no
resolverá tu problema en el lado cliente, ya que te seguirá mostrando la
hora, aunque sea 00:00:00.
¿Por qué?¿De donde salen esos hh:mm:ss, si hemos dicho que no tiene
formato? Pues los pone el proceso de conversión que sigues cuando pasas
los datos que te ha traído Linq a los objetos que tienes en pantalla. Aquí
es donde tienes que meter tú el formato. Si estás usando databinding y no
quieres manipular los formatos con los eventos del enlace, hay un truco
muy sencillo que puedes hacer, que consiste en meter la conversión en la
sentencia LINQ:

var q = from x in contexto.tabla
select new { x.campo1, etc etc,
Fecha=x.Fecha.ToString("dd/MM/aaaa") };
DataGridView1.DataSource = q.ToList();


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida