Εφόσον δεν χρησιμοποιείς το DataReader για κάτι άλλο, μπορείς να μεταφέρεις τη δήλωση του ακριβώς στο σημείο που τον χρησιμοποιείς. Μπορείς επιπλέον να χρησιμοποιήσεις το Using statement για να εξασφαλίσεις ότι ο DataReader θα κλείνει πάντα, ακόμα και αν υπάρχει exception. Το ίδιο μπορείς να κάνεις και για το connection:
cmd = New SqlClient.SqlCommand
cmd.CommandText = "SP_Categories"
cmd.CommandType = CommandType.StoredProcedure
Try
Using Con As SqlConnection = New SqlConnection(connectionString)
cmd.Connection = Con
Using myReader As SqlDataReader=cmd.ExecuteReader()
....
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
Γενικά, είναι πολύ καλή πρακτική να δηλώνεις μία μεταβλητή όσο πιο κοντά γίνεται στο σημείο όπου θα χρησιμοποιηθεί, ακριβώς για να αποφύγεις προβλήματα σαν αυτό που αντιμετώπισες. Άλλη καλή τακτική είναι να θέτεις τιμή στην μεταβλητή στην ίδια γραμμή όπου κάνεις τον ορισμό. Έτσι εξασφαλίζεις ότι η μεταβλητή σου θα φαίνεται μόνο μέσα στο block που χρησιμοποιείται.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos