Если ваш читатель пуст, это значит, что ваш запрос не дал результата.
Глядя на ваш код, я бы сказал, что изображение отсутствует в базе данных. Вы, вероятно, должны предполагать, что это может и произойдет, и либо передавать пустое изображение в браузер, либо возвращать ошибку HTTP 404.
[Update]
Вы проверяли сгенерированную строку SQL? Когда вы добавляете id в строку SQL, она возвращается в строку. Если идентификатор больше 1000, вы можете получить локализованное представление целого числа (т.е. 1.000 вместо 1000). Это объясняет, почему ваш запрос в SSMS возвращает результат, а страница - нет.
Оригинальный ответ:
Я заметил, что вы используете int.Parse
; вы можете вместо этого использовать int.TryParse
. Это просто вернет false
, если значение не является действительным int
.
Кроме того, вы строите свой SQL путем конкатенации строк. Это считается плохой практикой. Вы должны использовать параметры.
Еще одна лучшая практика - заключить соединение и читателя в оператор using
. Это обеспечит закрытие соединения и считывателя, когда они больше не нужны, особенно в случае исключения.
Наконец, вы можете рассмотреть возможность перемещения строки подключения в файл web.config.