DateTime接受空值

时间:2013-12-20 07:38:20

标签: c# sql sql-server datetime

在我正在处理的网络应用中,网络应用应该能够接受空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。

4 个答案:

答案 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;
...