Non credo sia necessario il loop until per chiudere la connessione, penso sia sufficiente un if, anche perché credo che, in caso fallisse il comando, genererebbe un'eccezione
Hai ragione, ma basta fare un piccolo controllo per risolvere il problema:

codice:
If Cn.State <> ConnectionState.Closed Then
       Cn.Close()
End If