在VB.NET中解析日期时出现InvalidCastException

在VB.NET中解析日期时出现InvalidCastException,vb.net,datetime,.net,Vb.net,Datetime,.net,我试图将输入文本框的日期解析为DateTime值,但在TryParseExact方法中不断出现异常。我想做的是: DateTime.TryParseExact(tbAddDate.Text.Trim, "yyMMdd", New CultureInfo("sv-SE"), DateTimeStyles.None, row.Date) 这会抛出一个InvalidCastException,并显示消息“从类型'DBNull'转换为类型'Date'无效”。我意识到发生的情况是,它试图将row.Dat

我试图将输入文本框的日期解析为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解决很多问题,但客户觉得它们非常笨重,因为无法直接用键盘输入日期。

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

旁注:可能此
row.Date
不接受
Date.MinValue
作为合法值,即:row.Date可能只接受2000年1月1日以后的日期,并且
Date.MinValue
返回01/01/0001

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


旁注:可能此
row.Date
不接受
Date.MinValue
作为合法值,即:row.Date可能只接受2000年1月1日以后的日期,并且
Date.MinValue
返回01/01/0001

复制错误的唯一方法是将row.Date声明为System.DbNull。在这一点上,代码甚至没有编译。您能提供多行示例代码吗?查看更多上下文可能会有所帮助。重现错误的唯一方法是将row.Date声明为System.DbNull。在这一点上,代码甚至没有编译。您能提供多行示例代码吗?这可能有助于了解更多的背景。这解决了问题。row.Date属于数据集,并且基础数据列具有DefaultValue=如果我将默认值更改为01/01/0001,它将正常工作,但我不想这样做,因为这样会有效地允许空值。我同意你的建议。这就解决了问题。row.Date属于数据集,并且基础数据列具有DefaultValue=如果我将默认值更改为01/01/0001,它将正常工作,但我不想这样做,因为这样会有效地允许空值。我就照你的建议去做。