我在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
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那么您应该下一步:
date == 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;