无法使用 Visual Basic 代码将对象从 DBNull 转换为其他类型
Posted
技术标签:
【中文标题】无法使用 Visual Basic 代码将对象从 DBNull 转换为其他类型【英文标题】:Object cannot be cast from DBNull to other types with visual basic code 【发布时间】:2021-08-19 09:01:41 【问题描述】:我已将虚拟数据添加到我的 SQL 数据库中。 当我尝试运行 VB 时,它返回一个空错误。
我所做的是从数据库中删除虚拟数据,使其不再读取空值。 即使在删除它之后,VB 文件仍然会抛出错误,就像空值仍然存在一样。 我已经运行了一个 sql 脚本来检查,我可以确认它不再存在。
这是引发错误的代码行。
If Date.Now.AddDays(LoadsFilter * -1) > Convert.ToDateTime(myReader(2)) Then
ShowLoad = 0
End If
我对 vb 还是很陌生,所以我不确定在这里做什么。 我正在考虑传递一个方法来读取空值,但我已经删除了空值。我不知道该怎么做,有人可以帮忙吗?
【问题讨论】:
您需要在使用前检查 myReader(2) 是否返回 null。 是的,它是 'If IsDBNull(myReader(2)) Then myhtml = myHtml + "无需进行任何转换。数据读取器有自己的方法用于空测试和获取适当类型的数据,例如
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")))
【讨论】:
以上是关于无法使用 Visual Basic 代码将对象从 DBNull 转换为其他类型的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从Visual Basic 6程序传递给VBscript代码?
Visual Basic 出现多个奇怪错误 - 无法设置控件的 Win32 父窗口