Vb.net 数据为空。不能使用IF语句对空值调用此方法或属性

Vb.net 数据为空。不能使用IF语句对空值调用此方法或属性,vb.net,Vb.net,我在vb.net中有以下代码: If(reader4.GetString(1) Is DBNull.Value, reader4.GetString(1), "0") 因此,如果数据为null,它应该只使用“0”,但它仍然显示错误 我这里有什么问题吗?这应该可以: If(reader4.GetString(1) Is Nothing, "0", reader4.GetString(1)) 问题是DBNull。Value不是对象,而是值。这意味着您需要使用“equals”而不是“is”。以下其

我在vb.net中有以下代码:

If(reader4.GetString(1) Is DBNull.Value, reader4.GetString(1), "0")
因此,如果数据为null,它应该只使用“0”,但它仍然显示错误

我这里有什么问题吗?

这应该可以:

If(reader4.GetString(1) Is Nothing, "0", reader4.GetString(1))

问题是DBNull。Value不是对象,而是值。这意味着您需要使用“equals”而不是“is”。以下其中一项应该有效:

If(reader4.GetString(1).Equals(DBNull.Value), "0", reader4.GetString(1))

If(reader4.GetString(1) = DBNull.Value, "0", reader4.GetString(1))

If(Convert.IsDBNull(reader4.GetString(1)), "0", reader4.GetString(1))

也就是说,最好确保
reader4.GetString(1)
存在。否则,可怕的“对象未设置为对象实例”异常可能会导致它的丑陋头部。

直接使用IsDbNull更好/更简单:

If(reader4.IsDBNull(1), "0", reader4.GetString(1))

即使列数据类型不是string(int、date等),这也会起作用,但是比较reader4.GetString与Nothing是有限制的,因为reader4.GetString是其他数据类型列的例外。

我认为您的逻辑是颠倒的。你的意思是
If(reader4.GetString(1)是DBNull.Value,“0”,reader4.GetString(1))
?我确实这么认为,但我使用了If(reader4.GetString(1)是DBNull.Value,“0”,reader4.GetString(1)),它显示了与测试NULL和使用NULL值相同的错误。您的意思是:不是DBNull.Value?您可以改为检查reader4.IsDbNull(1)吗?