今天我偶然發現了VB.net If()語句的奇怪行爲。也許你可以解釋爲什麼它像它那樣工作,或者你可以確認它是一個錯誤。If()語句的奇怪行爲
所以,我有一個帶有「TestTable」表的SQL數據庫,其中包含一個可以包含NULL的int列「NullableColumn」。我想宣讀本專欄的內容。
所以我宣佈Nullable(Of Integer)
類型的變量對於這個問題,打開SqlClient.SqlDataReader
爲「選擇NullableColumn從TestTable的」,並使用下面的代碼來獲得本專欄的內容:
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
,因爲此列確的內容爲空時If(1=2, Nothing, "Not Nothing")
交付字符串「不是Nothing」If(1=1, Nothing, "Not Nothing")
交付Nothing
reader.GetInt32(reader.GetOrdinal("NullableColumn"))
拋出一個錯誤,因爲NULL不能轉換爲Integer
那麼,爲什麼我的變量的值是0?
你已經使用了正常的如果 - 那麼 - elese聲明:
現在,您可以按如下方式使用它?它工作嗎? –
出於興趣,你是否打開了Option Strict?如果不是,你應該 –
是的,我嘗試了一個正常的'如果...那麼...否則...'語句,這工作。打開Option Strict並沒有改變任何事情。 – Nostromo