Как восстановить изображение из базы данных в gridview
1. таблица базы данных - tbl_image
идентификатор инт
имя нварчар (50)
изображение изображения
2. HTML-страница ASPX
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="id" HeaderText="Id" /> <asp:BoundField DataField="name" HeaderText="Name" /> <asp:TemplateField HeaderText="Picture"> <ItemTemplate> <img src="Handler1.ashx?Id=<%# Eval("id").ToString() %>" width="150" height="100" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
3.Кодировку страницы aspx
protected void ShowFromDatabase(object sender, EventArgs e) { string str2 = "select id,name from tbl_image"; obj.dr = obj.ret_dr(str2); GridView1.DataSource = obj.dr; GridView1.DataBind(); }
4.Handler1.страницы данного
public class Handler1 : IHttpHandler { Class1 obj = new Class1(); public void ProcessRequest(HttpContext context) { //context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); string pid=context.Request.QueryString["Id"]; string str = "select picture from tbl_image where id='"+pid+"'"; obj.dr = obj.ret_dr(str); while (obj.dr.Read()) { context.Response.ContentType = "image/jpg"; //context.Response.BinaryWrite((Byte[])obj.dr[obj.dr.GetOrdinal("picture")]); context.Response.BinaryWrite((Byte[])obj.dr["picture"]); } } public bool IsReusable { get { return true; } } }
Вот мои четыре страницы.Если кто-то может это исправить,то любезно ответьте мне
Что я уже пробовал:
Я попробовал с этими четырьмя страницами.В окне вывода id отображается имя, но изображения там нет,только символ креста
King Fisher
есть какие-нибудь исключения ? обратитесь к этому фрагменту кода
Member 11873864
Никаких исключений.Но картинка идет с символом креста.
Member 11873864
Спасибо за ответ.Я хочу отобразить все изображения из базы данных одним щелчком мыши, а не только одно изображение.
Member 11873864
Я использовал ваш ссылочный код, но проблема все та же.
Member 11873864
Это необходимо, чтобы сохранить изображение на .объем папки?
King Fisher
пожалуйста, поставьте точку останова и отладьте ее.
Member 11873864
Я использовал точки останова и также получаю правильный идентификатор.Но изображение не появляется в окне вывода.
King Fisher
Установите точку останова в while (obj. dr. Read ()), проверьте, получаете ли Вы данные или нет.
Member 11873864
Да, я там тоже проверял.Но теперь мой код работает, потому что теперь я использовал параметризованные запросы
King Fisher
нет необходимости, потому что вы храните изображение в таблице direclty
Member 11873864
ладно
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Member 11873864
Большое вам спасибо.Ваше решение работает.Но я не понимал, почему?Почему этот код работает с параметризованными SQL-запросами.