datetime проблема с 01.01.1900

у меня есть столбец datetime на сервере sql и его необязательное поле, и если пользователь решил не вводить, тогда я хочу вставить значение как NULL в таблицу, и я определяю что-то вроде этого:

@deadlineDate datetime = null

когда я вставляю на сервер SQL, у меня есть этот код в asp.net

private DateTime? GetDeadlineDate()
{
    DateTime? getDeadlineDate = null;
    if (!string.IsNullOrEmpty(DeadlineDate.SelectedDate))
    {
       getDeadlineDate = DateTime.Parse(DeadlineDate.SelectedDate).Date;
    }
    if (!getDeadlineDate.HasValue)
    {
        return null;
    }
    return getDeadlineDate.Value;

}

, но проблема заключается в следующем: его вставив

1900-01-01 00:00:00.000

в таблицу sql вместо NULL

, что я здесь не так делаю?

ОБНОВЛЕНИЕ:

private DateTime? GetDeadlineDate()
{
    DateTime? getDeadlineDate = null;
    if (!string.IsNullOrEmpty(DeadlineDate.SelectedDate))
    {
       getDeadlineDate = DateTime.Parse(DeadlineDate.SelectedDate).Date;
    }
    if (!getDeadlineDate.HasValue)
    {
        return DBNull.Value; //throws error....
    }
    return getDeadlineDate.Value;          
}
8
задан abatishchev 19 May 2011 в 11:43
поделиться

2 ответа

Предполагая, что у вас есть:

DateTime? date = GetDate();
command.Parameters.Add("@date").Value = date;

в случае, когда date == null вы хотите вставить SQL NULL, т.е. DBNull.Value , поэтому вам следует сделать next:

DateTime? date = GetDate();
command.Parameters.Add("@date").Value = (object)date ?? DBNull.Value;

, что означает то же, что и:

if(date != null)
     // use date
else
     // use DBNull.Value

, если вы хотите позаботиться об обнуляемом datetime в своей функции, вы должны объявить его следующим образом:

private object GetDate()
{
    DateTime date;
    return DateTime.TryParse(selectedDate, out date) ? date : DBNull.Value;
}

command.Parameters.Add("@date").Value = GetDate();

но я не рекомендую это делать и использовать next:

command.Parameters.Add("@date").Value = (object)GetDate() ?? DBNull.Value;
​​
5
ответ дан 5 December 2019 в 15:16
поделиться

Вам понадобится DBNull.Value , а не null при вставке в SQL-сервер.

При установке DateTime = null в .NET требуется минимальное значение DateTime , которое составляет 01-01-0001.

Я предполагаю, что вы используете SMALLDATETIME в SQL Server, где минимальное значение - «01/01/1900»

6
ответ дан 5 December 2019 в 15:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: