Parece que no puedo convertir un sqldatatime.minvalue a un objeto datetime.Cómo convertir sqldatetime.minvalue a datetime?
me trataron:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Eso obviamente no funciona.
Parece que no puedo convertir un sqldatatime.minvalue a un objeto datetime.Cómo convertir sqldatetime.minvalue a datetime?
me trataron:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Eso obviamente no funciona.
¿Alguna razón para no usar el explicit conversion operator?
DateTime dt = (DateTime) SqlDateTime.MinValue;
que funciona para mí:
using System;
using System.Data.SqlTypes;
class Test
{
static void Main()
{
DateTime dt = (DateTime) SqlDateTime.MinValue;
Console.WriteLine(dt);
}
}
¿por qué funcionaría eso y no Convert.ToDateTime() extraño? – codecompleting
@codecompleting, 'Convert.ToDateTime' necesitaría una sobrecarga adecuada para soportar el valor' SqlDateTime'. Los diseñadores de 'Convert' no deben haberlo considerado [lo suficientemente importante], mientras que los diseñadores de' SqlDateTime' ciertamente sí lo consideraron. –
Las respuestas que ha recibido le han mostrado dos formas diferentes de convertir el valor. Una es usar una conversión explícita definida para SqlDateTime
a DateTime
, la otra es acceder a la propiedad .Value
en la instancia SqlDateTime
, que devuelve DateTime
.
var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion
Hay compensaciones que vale la pena considerar. SqlDateTime
admite el concepto de valores nulos en la base de datos (DBNull, referenciado por otra respuesta ahora eliminada) a través del valor SqlDateTime.Null
. Si accede a la propiedad Value
en una instancia "nula", se encontrará con un SqlNullValueException
. Por otro lado, una conversión explícita a DateTime da como resultado {January 1, 1900 12:00:00 AM}
. Ninguno de estos resultados puede ser deseado en su código. Sobrescribir una entrada nula válida en la base de datos con un valor predeterminado no nulo podría ser tan malo como obtener una excepción en el tiempo de ejecución.
Si tiene una columna anulable en la base de datos, y si se está trabajando con SqlDateTime
, puede que tenga que probar de forma explícita y tratar SqlDateTime.Null
diferente, y entonces puede ser que no importa qué método se toma para la conversión de otros valores.
DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
date = null
else
date = theSqlDate.Value; // or (DateTime)theSqlDate;
Es una respuesta rara que es mejor que una respuesta mejor que la de Jon Skeet. –
Gracias por esto. Tu código me ayudó a leer un retorno de SQL 'DateTime dateValue = Convert.ToDateTime (reader.GetValue (8));' –