VB.net应用程序使用阅读器HasRows

时间:2015-03-06 15:51:07

标签: vb.net

我正在使用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变量时,但没有返回任何行,因此它甚至不应该到达此部分

3 个答案:

答案 0 :(得分:1)

我怀疑没有行,我假设至少有一行值为NULL。您可以使用IsDBNull-method

进行检查
If reader3.HasRows AndAlso Not reader3.IsDbNull(3)  Then
    FromToDates = reader3.GetString(3)
End If

但是,变量名称表明它是一个日期,但您将其存储为字符串。使用datedatetime的正确类型。如果它实际上是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