OrElse
is a short-circuiting operator, Or
is not.
By the definition of the boolean ‘or’ operator, if the first term is True then the whole is definitely true – so we don’t need to evaluate the second term.
OrElse
knows this, so doesn’t try and evaluate temp = 0
once it’s established that temp Is DBNull.Value
Or
doesn’t know this, and will always attempt to evaluate both terms. When temp Is DBNull.Value
, it can’t be compared to zero, so it falls over.
You should use… well, whichever one makes sense.