我正在使用vb.net中的数据读取器运行SQL查询
reader3 = myCommand3.ExecuteReader
reader3.Read()
If reader3.HasRows Then
FromToDates = reader3.GetString(3)
End If
此特定查询中没有返回任何行,但即使使用if reader3.HasRows
,仍会显示错误:
Additional information: Data is Null. This method or property cannot be called on Null values.
这是在尝试设置FromToDates
变量时,但没有返回任何行,因此它甚至不应该到达此部分
答案 0 :(得分:1)
我怀疑没有行,我假设至少有一行值为NULL
。您可以使用IsDBNull
-method:
If reader3.HasRows AndAlso Not reader3.IsDbNull(3) Then
FromToDates = reader3.GetString(3)
End If
但是,变量名称表明它是一个日期,但您将其存储为字符串。使用date
或datetime
的正确类型。如果它实际上是datetime
使用:
Dim FromToDates As Date
If reader3.HasRows AndAlso Not reader3.IsDbNull(3) Then
FromToDates = reader3.GetDateTime(3)
End If
答案 1 :(得分:0)
如果您使用的是Reader.read(),那么我认为您不需要读者,hasrow()。你可以做这样的事情
reader3 = myCommand3.ExecuteReader
If reader3.Read()Then
FromToDates = reader3.GetString(3)
End If
并且与您的错误相关,看起来您从数据库获取NULL值,而在vb中您无法读取NULL,我建议您在SQL脚本中使用ISNULL(Column_NAME,'')函数。
答案 2 :(得分:0)
即使行是空的(可能是所有DBNull),似乎还有一个从查询返回的行对象。这个线程中提供了几种不同的解决方案,它们都采用不同的方法来捕获错误之前的空行!
http://www.vbforums.com/showthread.php?555183-datareader-and-empty-records