Проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь открыть несколько устройств чтения данных для одного и того же соединения с БД. По умолчанию это даст вам исключение, так как будет сказано, что оно уже связано с соединением - как вы видели.
Вы можете использовать MultipleActiveResultsets , причем начиная с .NET 2.0 и SQL Server 2005 и далее вы можете указать дополнительную опцию в строке соединения, чтобы включить несколько активных наборов результатов для одного соединения БД, добавив:
MultipleActiveResultSets=True;
Альтернатива состоит в том, чтобы использовать другое соединение для открытия внутреннего устройства чтения данных.
Или даже, возможно, можно переосмыслить ваш оригинальный подход - возможно, есть способ сделать это без вложенных читателей.