如何从 LINQ 将 Sql DateTime 设置为 null
我有两种情况需要将 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;
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数据类中传递DOB成员的空值属性
许多人建议设置自动生成值为 true 并且不插入任何值。确实,它适用于插入盒。
但现在假设,已经有一个客户条目,其中某些日期时间值设置为 DOB 字段。现在用户想要清除该值(删除出生日期),那么在这种情况下,我必须使用 UpdateOn 传递一个空值来清除相应客户行中提交的日期时间。
预先非常感谢您:)
I have two cases when I would need to set DateTime field in Sql to null. I use C# and LINQ to SQL Classes. I read many questions on stackoverflow which are like my question but still I feed mine a bit different.
When we insert a new customer.
Corresponding code:
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 is System.DateTime.
What I tried is:
1)
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null;
But this will not succeed as SqlDateTime cannot be converted to System.DateTime.
2)
DateTime? nullDateTime = new DateTime();
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value
In this case, build succeeds but it will throw an SqlDateTime overflow exception.
So then how to pass null value
Property of DOB Member in LINQ Dataclass
Many of them suggest to set Auto Generated Value to true and not to insert any value. True, it works in insert cases.
But now assume, there is already a customer entry where some datetime value is set to DOB field. Now user wants to clear this value (remove the birthdate), then in this case I have to pass a null value using UpdateOn to clear the datetime filed in corresponding customer row.
Thank you very much in advance :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该能够使用:
注意
null
到DateTime?
的转换。当前的问题是编译器无法根据操作数计算出条件表达式的类型。第二次尝试的问题是您正在创建一个新的不可为 null 的 DateTime 值,即 AD 0001 年 1 月 1 日。您可以将其更改为:
You should be able to use:
Note the cast of
null
toDateTime?
. The current problem is that the compiler can't work out the type of the conditional expression based on the operands.The problem with your second attempt is that you're creating a new non-nullable DateTime value, i.e. 1st January 0001 AD. You could change that to:
请尝试一下,
因为 DOB 可为空,此代码将为您提供您想要的。顺便说一句,我找不到像 nullDateTime.Value 这样的东西
plz try
since DOB is nullable this code will give you what you want. BTW i can't find anything like nullDateTime.Value