у меня есть столбец 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;
}
Предполагая, что у вас есть:
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;
Вам понадобится DBNull.Value
, а не null
при вставке в SQL-сервер.
При установке DateTime = null
в .NET требуется минимальное значение DateTime
, которое составляет 01-01-0001.
Я предполагаю, что вы используете SMALLDATETIME
в SQL Server, где минимальное значение - «01/01/1900»