比较datetime的null值

时间:2017-11-13 14:02:07

标签: c# asp.net

我将日期作为字符串存储在sql表中。如果未传递date,则它将为null。现在我想从asp.net的设计页面检查日期是否为null。我收到了类型转换的错误。任何人都知道如何克服这个问题?

<%# ((DateTime)Eval("Date")).ToString("yyy-MM-dd hh:mm tt") %>">

此处数据以字符串形式输入。

谢谢

2 个答案:

答案 0 :(得分:2)

  

我将日期作为字符串存储在SQL表中。

这是您的第一个问题(here is a good explanation of why this is a problem)。

  

我收到了类型广告的错误。

这就是你的第一个问题(将日期存储为字符串)导致第二个问题(类型转换错误)。虽然可以通过使用stringDateTime.ParseDateTime.ParseExactDateTime.TryParse解析日期来解决此问题,但我强烈建议不要使用这些方法中的任何一种。< / p>

好消息是,一旦你解决了第一个问题,第二个问题就会消失!

使用此方法更改列的类型而不会丢失数据:

  • Add a new column类型date到您的表格
  • 运行更新语句以从包含日期字符串表示的旧date列填充新的varchar
  • 删除旧的varchar

答案 1 :(得分:1)

您的结果变量必须是可空类型(您无法将null分配给DateTime)。使用DateTime.TryParseExact()。如果解析失败,请分配null,否则分配已解析的值。

正如DavidG所说,这是一个黑客,实际上你应该将日期存储为日期时间或datetime2 SQL类型!

using System.Globalization;

const string format = "yyyy-MM-dd hh:mm tt";
CultureInfo enUS = new CultureInfo("en-US"); 

string dateString = Eval("Date"); // e.g. "2017-11-13 02:16 PM"

DateTime? result; // final result or null stored here

DateTime parseResult;
if (DateTime.TryParseExact(dateString, format, enUS, DateTimeStyles.None, out parseResult)) {
    result = parseResult;
}
else {
    result = null;
}

// check for null before displaying
string display = result.HasValue ? result.Value.ToString(format) : "null";

.net Fiddle