一尘不染

1900年1月1日的datetime问题

sql

我在sql server中有一个datetime列及其可选字段,如果用户决定不输入,那么我想在表中插入NULL值,并定义如下内容:

@deadlineDate datetime = null

当我插入sql server时,我在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;          
}

阅读 283

收藏
2021-03-10

共1个答案

一尘不染

假设您有:

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

如果date == null您想插入SQL NULL,DBNull.Value那么您应该下一步:

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();

但我不建议您这样做,并在下一个步骤中使用:

command.Parameters.Add("@date").Value = (object)GetDate() ?? DBNull.Value;
2021-03-10