今天我偶然发现了 VB.net If() 语句的一个奇怪行为。也许您可以解释为什么它会像现在这样工作,或者您可以确认它是一个错误。
所以,我有一个 SQL 数据库,其中有一个表“TestTable”,其中一个 int 列“NullableColumn”可以包含 NULL。我想读出本专栏的内容。
所以我为此声明了一个类型的变量,为“SELECT NullableColumn FROM TestTable”Nullable(Of Integer)
打开一个SqlClient.SqlDataReader
并使用以下代码获取该列的内容:
Dim content as Nullable(Of Integer)
...
Using reader as SqlClient.SqlDataReader = ...
content = If(reader.IsDBNull(reader.GetOrdinal("NullableColumn")), Nothing, reader.GetInt32(reader.GetOrdinal("NullableColumn")))
End Using
但在那之后,我的变量content
的值为 0,Nothing
与我预期的不同。
调试时一切看起来都很好,所以
reader.GetOrdinal("NullableColumn")
提供此列的正确序号位置(即 0)reader.IsDBNull(0)
并reader.IsDBNull(reader.GetOrdinal("NullableColumn"))
交付True
,因为该列的内容确实为 NULLIf(1=2, Nothing, "Not Nothing")
提供字符串“Not Nothing”If(1=1, Nothing, "Not Nothing")
交付Nothing
reader.GetInt32(reader.GetOrdinal("NullableColumn"))
抛出错误,因为 NULL 不能转换为Integer
那么,为什么我的变量的值为 0?