对象不能用visual basic代码从DBNull强制转换为其他类型



我已经添加了虚拟数据到我的SQL数据库。当我尝试运行VB时,它返回一个null错误。

我所做的是从数据库中删除虚拟数据,因此它不再读取空值。即使在删除它之后,VB文件仍然抛出错误,就像空值仍然存在一样。我已经运行了一个sql脚本来检查,我可以确认它不再存在。

下面是抛出错误的代码行:

If Date.Now.AddDays(LoadsFilter * -1) > Convert.ToDateTime(myReader(2)) Then
ShowLoad = 0 
End If

我还是vb的新手,所以我不知道在这里该怎么做。我正在考虑传递一个方法来读取空值,但我已经删除了空值。我不知道该怎么做,有人能帮帮忙吗?

不需要任何转换。数据读取器有自己的方法来进行空测试和获取适当类型的数据,例如

If Not myDataReader.IsDBNull(2) Then
Dim dt = myDataReader.GetDateTime(2)
'Use dt here.
End If

您也可以使用单行来获得Nullable(Of Date):

Dim dt = If(myDataReader.IsDBNull(2), New Date?, myDataReader.GetDateTime(2))

注意,如果您更喜欢使用列名而不是索引,这会使您的代码更清晰,那么您可以使用GetOrdinal方法,因为其他方法只支持索引:

Dim dt = If(myDataReader.IsDBNull(myDataReader.GetOrdinal("ColumnName")),
New Date?,
myDataReader.GetDateTime(myDataReader.GetOrdinal("ColumnName")))

最新更新