我在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;
}
答案 0 :(得分:6)
插入SQL服务器时需要DBNull.Value
而不是null
。
在.NET中设置DateTime = null
时,DateTime
的最小值为01-01-0001。
我假设您在SQL Server中使用SMALLDATETIME
,其中最小值为'01 / 01/1900'
答案 1 :(得分:5)
假设你有:
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
如果你想在你的函数中关注可为空的日期时间,你应该在下一步声明它:
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;
答案 2 :(得分:0)
如果您将查询作为参数(字符串类型)发送到另一个执行查询的方法,如下所示:
int userno = 123;
string date_variable = null;
string query = string.Format(
@"INSERT INTO system_log (userno,ref_date) values ({0},'{1}');",userno,date_variable);
obj.executeInsert(query,conn);
使用ExecuteNonQuery()或其他东西执行时,这可能会再次保存默认日期。
甚至传递(对象)date_variable ?? DBNull.Value;不会在这种情况下工作
然后你可以简单地将date_variable设置为" null"
if (string.IsNullOrEmpty(date_variable))
date_variable= "null";
else
date_variable= "'" + date_variable+ "'";
string query = string.Format(
@"INSERT INTO system_log (userno,ref_date) values ({0},{1});",123,date_variable);
obj.executeInsert(query,conn);