El valor devuelto se envía en último lugar en la respuesta de la base de datos, por lo que debe leer el conjunto de resultados por completo antes de poder acceder al valor devuelto.
¿Qué hace el SafeDataReader
hacer la clase? ¿Es posible que impida que se lea todo el conjunto de resultados?
Intente mover el código que lee el valor devuelto fuera de using
bloque para el lector de datos. Eso puede ayudar a avanzar la respuesta más allá del conjunto de resultados para que el valor devuelto esté disponible.