Esta cuestión se puede abordar de diversas maneras, pero en este caso te dejamos la resolución más completa en nuestra opinión.
Solución:
Necesitas cambiar tu conexión string y agrega esta opción
"MultipleActiveResultSets=True;"
A partir de SQL Server 2005 existe la opción MARS.
Con MARS un solo abrió La conexión podría servir a más de un comando a la vez. Entonces, por ejemplo, su conexión string debería ser así
"Server=myServerAddress;" +
"Database=myDataBase;" +
"Trusted_Connection=True;" +
"MultipleActiveResultSets=true;"
Ver los documentos en MARS
en un ‘normal’ configuración, cuando un SqlDataReader está abierto, SqlConnection está ocupado sirviendo al lector y no puede aceptar otros comandos.
(Ver comentarios en el enlace a SqlDataReader).
Su código anterior tiene un lector abierto cuando intenta emitir un comando usando la misma conexión.
Hay soluciones alternativas como llenar un conjunto de datos y luego recorrerlo (pero para conjuntos grandes esto afectará el rendimiento), por lo que el equipo de SQL de Microsoft presentó MARS
valoraciones y reseñas
Finalizando este artículo puedes encontrar las explicaciones de otros administradores, tú de igual manera puedes insertar el tuyo si te apetece.