After you set the reader's value once you can close it even after it's closed.
IsNull(reader.value) will return true before you set the reader's value for the first time.
Something like this should solve your problem:
Code:
If IsNull(reader.value) = false then reader.close
cmd.CommandText = ...