我将日期作为字符串存储在sql表中。如果未传递date,则它将为null。现在我想从asp.net的设计页面检查日期是否为null。我收到了类型转换的错误。任何人都知道如何克服这个问题?
<%# ((DateTime)Eval("Date")).ToString("yyy-MM-dd hh:mm tt") %>">
此处数据以字符串形式输入。
谢谢
答案 0 :(得分:2)
我将日期作为字符串存储在SQL表中。
这是您的第一个问题(here is a good explanation of why this is a problem)。
我收到了类型广告的错误。
这就是你的第一个问题(将日期存储为字符串)导致第二个问题(类型转换错误)。虽然可以通过使用string
,DateTime.Parse
或DateTime.ParseExact
从DateTime.TryParse
解析日期来解决此问题,但我强烈建议不要使用这些方法中的任何一种。< / p>
好消息是,一旦你解决了第一个问题,第二个问题就会消失!
使用此方法更改列的类型而不会丢失数据:
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";