Dans la mesure où tu fais un Select Max(), le dataReader est inutile.
Celui-ci sert à récupérer une liste de résultats.
Dans le cas précis un ExecuteScalar serait plus adapté selon moi.

Enfin,...