OrElse
est un court-circuitage opérateur, Or
ne l'est pas.
D'après la définition de l'opérateur booléen "ou", si le premier terme est vrai, alors l'ensemble est certainement vrai - nous n'avons donc pas besoin d'évaluer le deuxième terme.
OrElse
sait cela, et n'essaie donc pas d'évaluer temp = 0
une fois qu'il est établi que temp Is DBNull.Value
Or
ne le sait pas, et tentera toujours d'évaluer les deux termes. Lorsque temp Is DBNull.Value
il ne peut pas être comparé à zéro, donc il s'écroule.
Vous devriez utiliser... eh bien, celui qui a du sens.