Whats the difference between or and OrElse?
if temp is dbnull.value or temp = 0
if temp is dbnull.value OrElse temp = 0
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.