Lo using non l'ho mai usato, ma forse con il try/catch tengo traccia degli errori e mi accorgo di quello che succede.

Riassumendo quindi dite che va bene così come ho scritto senza il dispose?

Ho anche trovato questa "alternativa", forse è più consona?

codice:
        Finally

            ' Chiude la connessione se aperta
            '
            If (cn.State = ConnectionState.Open) Then cn.Close()

        End Try