Я не вижу ничего плохого в этом коде, и я сам запустил его, используя свой собственный sproc. Кажется хорошо.
Когда вы переходите через свой код в отладчике и попадаете в строку:
da.Fill(dt);
дайте ему поработать, прежде чем будет выполнена следующая строка, проверьте значение dt.Rows.Count
в окнах Watch
или Immediate
. Какое число сообщается?
Если dt.Rows.Count > 0
, то вам нужно проверить код, в котором вы что-то делаете, с помощью DataTable, получаемого из вашего метода - вот в чем проблема.
Если dt.Rows.Count ==0
, то он не возвращает никаких данных из сохраненного процесса - (кажется, это не та проблема, которая у вас есть), и вам нужно будет посмотреть на SQL внутри вашего sproc. Посмотрите и напишите, что вы найдете ...