在我正在处理的网络应用中,网络应用应该能够接受空DateTime
值,因为客户可能会对提供有关其出生日期的信息犹豫不决。当然,这不是一件容易的事,因为在C#中,DateTime
不可为空。
DateTime rawBirthDate = Convert.ToDateTime(txtDOB.Text);
fxTxn.BirthDate = rawBirthDate;
,我必须更改我的代码以接受空值:
DateTime? rawBirthDate = string.IsNullOrEmpty(txtBirthDate) ? (DateTime?)null : DateTime.Parse(txtBirthDate);
fxTxn.BirthDate = Convert.ToDateTime(rawBirthDate);
此代码反过来返回1/1/0001 12:00:00.000 AM
。但是,MSSQL抛出一个DateOutOfRangeException
,说日期必须在17年1月1日至12月31日之间。
我完全陷入了困境。在我的SQL表上,我允许BirthDate
列接受空值。现在的问题是,如何使C#考虑null DateTime值?最终结果是,如果客户没有提供出生日期信息,系统仍应该能够保存记录,但客户记录中的BirthDate列仍然是NULL。
答案 0 :(得分:3)
你需要做的是:你的列表应该为BirthDate接受null(这是正确的)。在C#中,使变量rawBirthDate可以为空。
现在,您需要检查的条件是:
rawBirthDate.HasValue
如果是,则在db。中插入日期。
如果为false,不在数据库中插入任何内容(这就是“允许null”在SQL中的含义)。
答案 1 :(得分:2)
为什么要在datetime中转换null值,如果定义了nullable变量,那么它可以存储null vaue。 实际上你需要定义BirthDate属性也可以为空,如果用户没有输入日期,则需要存储空值
fxTxn.BirthDate = string.IsNullOrEmpty(txtBirthDate) ? null : DateTime.Parse(txtBirthDate);
在db中,您需要使该列允许空值并检查BirthDate的值,如
if (fxTxn.BirthDate.HasValue)
{
// pass value in db otherwise not
}
答案 2 :(得分:2)
如何使C#考虑null DateTime值
您的值为空。问题是您将其转换为标准DateTime,它为您提供DateTime.MinValue
(1/1/0001)
答案 3 :(得分:2)
我认为问题可能出在实际将值插入数据库的代码中:
...
var valueToInsert = rawBirthDate ?? DBNull.Value;
...