【问题标题】:InvalidCastException when parsing dates in VB.NET在 VB.NET 中解析日期时出现 InvalidCastException
【发布时间】:2010-03-03 23:40:41
【问题描述】:

我正在尝试将输入到 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 解决很多这些问题,但客户觉得它们非常笨拙,因为无法直接使用键盘输入日期。

【问题讨论】:

  • 我可以重现错误的唯一方法是将 row.Date 声明为 System.DbNull。那时代码甚至无法编译。你能提供多于一行的示例代码吗?查看更多上下文可能会有所帮助。

标签: vb.net datetime .net


【解决方案1】:

似乎(正如 magnifico 的评论所暗示的)问题与您将 row.Date 作为 result 参数传递的事实严格相关。当代码尝试将row.Date 分配给Date.MinValue 时,它必须发生(除非文档不准确,在这种情况下不太可能发生这种情况)。 我建议您传递一些不同的 result 参数,并在调用 TryParseExact 后使用其值更新 row.Date。它可能不是最终的永久解决方案,但它应该可以帮助您检查此错误并找到 InvalidCast 异常的原因。

旁注:也许 row.Date 不接受 Date.MinValue 作为合法值,即:row.Date 可能只愿意接受从 01/01/2000 开始的日期,而 Date.MinValue 返回 01/01 /0001。

【讨论】:

  • 这解决了这个问题。 row.Date 属于数据集,并且基础 DataColumn 具有 DefaultValue = 如果我将默认值更改为 01/01/0001 它可以工作,但我不想这样做,因为这将有效地允许空值。我会按照你的建议去做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多