Well...yes. You are missing something.
Look at your code and assume it works the first time.
What happens the second time it is executed?
Simple: the connection is open, so this test fails:
If sqlconnection.State = ConnectionState.Closed Then
So you don't do anything in your worker the second and subsequent times, because the connection is not closed - it could be open, it could be broken - you don't know:
http://msdn.microsoft.com/en-us/library/system.data.connectionstate(v=vs.110).aspx[
^]
Instead of this, put a finally block in there, which closes and disposes the connection, and rebuild a new one each time.
And I'd add a Thread.Wait for a couple of seconds too - or your DB admin is going to get well and truly annoyed with you!