我正在尝试将输入TextBox的日期解析为DateTime值,但我在TryParseExact方法中不断获得异常。我想做的是:
DateTime.TryParseExact(tbAddDate.Text.Trim, "yyMMdd", New CultureInfo("sv-SE"), DateTimeStyles.None, row.Date)
这将抛出InvalidCastException,并显示消息“从类型'DBNull'转换为'Date'类型无效。”我意识到发生了什么,它正在尝试将row.Date设置为DBNull,这不是DateTime的有效值。我不明白为什么它试图这样做,因为文档声明它应该设置为MinValue而不是DBNull。
作为旁注,我知道我可以通过使用DateTimePicker解决很多这些问题,但客户觉得它们非常笨重,因为无法直接用键盘输入日期。
答案 0 :(得分:1)
似乎(正如magnifico的评论所暗示的那样)问题与您将row.Date
作为结果参数传递的事实严格相关。当代码尝试使用row.Date
分配Date.MinValue
时必须进行此操作(除非文档不准确,在此方案中不太可能)。
我建议您传递一些不同的结果参数,并在调用row.Date
后使用其值更新TryParseExact
。它可能不是最终的永久解决方案,但它应该帮助您检查此错误并找到InvalidCast异常的原因。
旁注:也许这个row.Date
不接受Date.MinValue
作为合法值,即:row.Date可能愿意仅接受2000年1月1日起的日期,{{1返回01/01/0001。