Подтвердить что ты не робот

Как преобразовать sqldatetime.minvalue в datetime?

Я не могу преобразовать sqldatatime.minvalue в объект datetime.

Я пробовал:

Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);

Это явно не сработало.

4b9b3361

Ответ 1

Любая причина не просто использовать явный оператор преобразования ?

DateTime dt = (DateTime) SqlDateTime.MinValue;

Это работает для меня:

using System;
using System.Data.SqlTypes;

class Test
{
    static void Main()
    {
        DateTime dt = (DateTime) SqlDateTime.MinValue;
        Console.WriteLine(dt);
    }
}

Ответ 2

Не нужно конвертировать. SqlDateTime имеет свойство Значение, которое возвращает DateTime.

DateTime dt = SqlDateTime.MinValue.Value;

Ответ 3

Полученные ответы показали два способа конвертации значения. Один из них заключается в использовании явного преобразования, определенного для SqlDateTime - DateTime, а другой - для доступа к свойству .Value в экземпляре SqlDateTime, который возвращает DateTime.

var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion

Есть компромиссы, которые стоит рассмотреть. SqlDateTime поддерживает концепцию нулевых значений в базе данных (DBNull, на которую ссылается другой теперь удаленный ответ) через значение SqlDateTime.Null. Если вы используете свойство Value в экземпляре "null", вы столкнетесь с SqlNullValueException. С другой стороны, явное преобразование в DateTime приводит к {January 1, 1900 12:00:00 AM}. Ни один из этих результатов не может быть желательным в вашем коде. Замена допустимой нулевой записи в базе данных с ненулевым значением по умолчанию может быть столь же плохим, как получение исключения во время выполнения.

Если у вас есть нулевой столбец в базе данных, и если вы работаете с SqlDateTime, вам может потребоваться явно проверить и обработать SqlDateTime.Null по-разному, и тогда может не иметь значения, какой подход вы используете для преобразования других значения.

DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
    date = null
else 
    date = theSqlDate.Value; // or (DateTime)theSqlDate;