oggi mi sono imbattuto in uno strano comportamento dell'istruzione VB.net If(). Forse puoi spiegare perché funziona come fa, o forse puoi confermare che si tratta di un bug.Strano comportamento dell'istruzione If()
Quindi, ho un database SQL con una tabella "TestTable" con una colonna int "NullableColumn" che può contenere NULL. Mi piacerebbe leggere il contenuto di questa colonna.
Quindi dichiaro una variabile di tipo Nullable(Of Integer)
per quella materia, aprire un SqlClient.SqlDataReader
per "SELECT NullableColumn DA TestTable" e utilizzare il seguente codice per ottenere il contenuto di questa colonna:
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
Ma dopo che il mio variabile content
ha il valore 0, non Nothing
come mi sarei aspettato.
Quando il debug tutto sembra a posto, in modo da
reader.GetOrdinal("NullableColumn")
batte corretta posizione ordinale di questa colonna (che è 0)reader.IsDBNull(0)
ereader.IsDBNull(reader.GetOrdinal("NullableColumn"))
fornireTrue
, dal momento che il contenuto di questa colonna in effetti è NULLIf(1=2, Nothing, "Not Nothing")
batte lo stringa "Not Nothing"If(1=1, Nothing, "Not Nothing")
trasportaNothing
reader.GetInt32(reader.GetOrdinal("NullableColumn"))
genera un errore, dal momento che NULL non può essere convertito inInteger
Quindi, perché fa il mio variabile ha il valore 0?
Avete usato un normale Se - dichiarazione elese - allora? Funziona? –
Per motivi di interesse hai attivato Option Strict? Se no dovresti farlo –
Sì, ho provato un normale 'Se ... Allora ... Altrimenti ... 'statemant, e questo ha funzionato. L'attivazione di Option Strict non ha cambiato nulla. – Nostromo