Как преобразовать sqldatetime.minvalue в datetime? - PullRequest
55 голосов
/ 07 октября 2011

Не получается преобразовать значение sqldatatime.minvalue в объект datetime.

Я пытался:

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

Это, очевидно, не сработало.

Ответы [ 3 ]

145 голосов
/ 07 октября 2011

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

DateTime dt = SqlDateTime.MinValue.Value;
71 голосов
/ 07 октября 2011

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

DateTime dt = (DateTime) SqlDateTime.MinValue;

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

using System;
using System.Data.SqlTypes;

class Test
{
    static void Main()
    {
        DateTime dt = (DateTime) SqlDateTime.MinValue;
        Console.WriteLine(dt);
    }
}
15 голосов
/ 07 октября 2011

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

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

Есть компромиссы, которые стоит рассмотреть. SqlDateTime поддерживает концепцию нулевых значений в базе данных (DBNull, на которую ссылается другой удаленный теперь ответ) через значение SqlDateTime.Null. Если вы обращаетесь к свойству Value в «нулевом» экземпляре, вы столкнетесь с 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...