Es un problema cuando se usa un DataReader y no se cumple los requisitos que exige el MSDN : “Siempre debe llamar al método Close cuando haya terminado de utilizar el objeto DataReader.”
Solución poner en la cadena de conexión:
MultipleActiveResultSets=true;
Más info
Que es
Transaciones