Ответы, которые вы получили, показали вам два разных способа преобразования значения. Первый - использовать явное преобразование, определенное для 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;