今日、私はVB.net If()ステートメントの奇妙な動作を見つけました。たぶんあなたはそれがそうであるように働いている理由、またはおそらくあなたがバグであることを確認することができます説明することができます。If()ステートメントの奇妙な動作
私はNULLを含むことができるint列 "NullableColumn"を持つテーブル "TestTable"を持つSQLデータベースを持っています。私はこのコラムの内容を読みたいと思います。
だから私は「のTestTable FROM NullableColumnを選択」と、この列の内容を取得するには、次のコードを使用するためにSqlClient.SqlDataReader
を開いて、そのことについてはタイプNullable(Of Integer)
の変数を宣言:
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")
がこの列の内容が実際 NULLであるため
reader.IsDBNull(0)
とreader.IsDBNull(reader.GetOrdinal("NullableColumn"))
(0)このカラムの正しい順序位置は、True
を送達する送達、申し分なく見えるIf(1=2, Nothing, "Not Nothing")
は、「何もない」文字列を返します。If(1=1, Nothing, "Not Nothing")
Nothing
reader.GetInt32(reader.GetOrdinal("NullableColumn"))
NULLだからInteger
に変換することはできませんので、なぜ私の変数が値0を持っているん、エラーがスローされますか?
あなたは、通常の場合に使用しました - そして - elese文を次のように
は今、あなたはそれを使用することができますか?それは動作しますか? –
興味のないあなたは 'Option Strict'を有効にしていますか?もしあなたがそうでなければ –
はい、私は通常の 'If ... Then ... Else ...' statemantを試して、これはうまくいきました。 Option Strictをオンにしても何も変わらない。 – Nostromo