У меня была похожая, но не идентичная проблема, которая сводила меня с ума, поэтому я добавлю это на случай, если это поможет кому-то по пути.
Я мог бы запустить SQL или вызвать хранимую процедуру с тем же SQL на SQL Server с помощью Management Studio и вернуть заполненный набор результатов. Но когда я использовал идентичный встроенный SQL или вызвал sproc, содержащий его, из своего кода Visual Studio для проекта веб-приложения ASP.Net, я получил пустой DataReader.
Как тот же идентичный SQL может возвращать набор результатов в Management Studio, но пустой DataReader в Visual Studio? Ответ состоял в том, что я работал от имени другого пользователя с разными разрешениями в двух инструментах. В Management Studio я работал в качестве разработчика в определенной роли SQL с большим количеством разрешений. Но в Visual Studio я работал как учетная запись службы, которой не были предоставлены разрешения для таблиц, к которым я обращался.
На самом деле, моя проблема была на один шаг сложнее. Все было хорошо, пока я не изменил SQL / sproc и не добавил таблицу JOIN в еще одну таблицу, а в этой таблице отсутствовали необходимые разрешения учетной записи службы. Но принцип тот же: проверьте все разрешения для пользователя, выполняющего вызов базы данных.