Я не могу преобразовать sqldatatime.minvalue в объект datetime.
Я пробовал:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Это явно не сработало.
Я не могу преобразовать sqldatatime.minvalue в объект datetime.
Я пробовал:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Это явно не сработало.
Любая причина не просто использовать явный оператор преобразования ?
DateTime dt = (DateTime) SqlDateTime.MinValue;
Это работает для меня:
using System;
using System.Data.SqlTypes;
class Test
{
static void Main()
{
DateTime dt = (DateTime) SqlDateTime.MinValue;
Console.WriteLine(dt);
}
}
Не нужно конвертировать. SqlDateTime
имеет свойство Значение, которое возвращает DateTime
.
DateTime dt = SqlDateTime.MinValue.Value;
Полученные ответы показали два способа конвертации значения. Один из них заключается в использовании явного преобразования, определенного для 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;