我有两种情况需要将Sql中的DateTime字段设置为null。我使用C#和LINQ to SQL类。我在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;
客户的出生日期是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来传递空值以清除相应客户行中的datetime字段。
非常感谢您的帮助 :)
Customer.DOB
应为DateTime?
而不是DateTime
。 - Jon Skeet