我有两种情况需要将Sql中的DateTime字段设置为null。我使用C#和LINQ to SQL Classes。我读了很多关于stackoverflow的问题,这些问题就像我的问题一样,但我仍然有点不同。
当我们插入新客户时。
对应代码:
Customer customer = new Customer();
customer.CustomerName = txt_name.Text;
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here;
customer.DOB是System.DateTime。
我尝试的是:
1)
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null;
但是这不会成功,因为SqlDateTime无法转换为System.DateTime。
2)
DateTime? nullDateTime = new DateTime();
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value
在这种情况下,构建成功但会抛出SqlDateTime溢出异常。
那么如何传递空值
LINQ Dataclass中DOB成员的属性
他们中的许多人建议将“自动生成值”设置为true,而不是插入任何值。没错,它适用于插入案例。
但现在假设已经有一个客户条目,其中某个日期时间值设置为DOB字段。现在用户想要清除这个值(删除生日),然后在这种情况下我必须使用UpdateOn传递一个空值来清除相应客户行中提交的日期时间。
非常感谢您提前:))
答案 0 :(得分:15)
你应该可以使用:
Customer customer = new Customer();
customer.CustomerName = txt_name.Text;
customer.DOB = dtp_dob.Checked
? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"))
: (DateTime?) null;
请注意null
到DateTime?
的演员表。当前的问题是编译器无法根据操作数计算出条件表达式的类型。
您第二次尝试的问题是您正在创建一个新的不可为空的DateTime值,即公元0001年1月1日。您可以将其更改为:
DateTime? nullDateTime = null;
customer.DOB = dtp_dob.Checked
? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"))
: nullDateTime;
答案 1 :(得分:0)
试试
if(dtp_dob.Checked )
{
customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"));
}
else
{
cstomer.DOB =null;
}
因为DOB可以为空,所以这段代码会给你你想要的东西。 BTW我找不到像nullDateTime.Value
这样的东西