powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подгрузка картинок из sql server в gridview
23 сообщений из 23, страница 1 из 1
Подгрузка картинок из sql server в gridview
    #38622175
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Собственно, сабж. Пишу проект на asp.net c# и уже второй день безуспешно пытаюсь реализовать подгрузку картинок из базы ms sql server в gridview. Пересмотрел кучу разного материала в интернете, но пока решить сию проблему не удалось. Буду очень благодарен за содействие в решении моей проблемы. Код прилагается.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string number = context.Request.QueryString["number"];
            if (!string.IsNullOrEmpty(number))
            {
                SqlConnection conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True");
                SqlCommand cmd = new SqlCommand("select flag from dbo.countries where number=@number", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@number", number);
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Read();
                context.Response.BinaryWrite((Byte[])dr[0]);
                context.Response.End();
                if (dr != null && !dr.IsClosed)
                    dr.Close();
                conn.Close();
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }


Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    <asp:GridView ID="GridView1" runat="server" Height="169px" Width="244px" AutoGenerateColumns="false">
    <Columns>
    <asp:BoundField DataField="number" HeaderText="number" />
    <asp:BoundField DataField="name" HeaderText="name" />
    <asp:BoundField DataField="coach" HeaderText="coach" />
    <asp:BoundField DataField="group_name" HeaderText="group_name" />
    <asp:BoundField DataField="place_number" HeaderText="place_number" />
    <asp:TemplateField HeaderText="flag"><ItemTemplate><img alt="flag" src="Handler.ashx?number=<%# Eval("number") %>" /></ItemTemplate></asp:TemplateField>
    </Columns>
    </asp:GridView>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public partial class Argentina : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("select * from dbo.countries", conn);
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            GridView1.DataSource = dr;
            GridView1.DataBind();
        }
    }
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622179
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty, где регистрация?
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622180
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полный код.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

namespace WebApplication6
{
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string number = context.Request.QueryString["number"];
            if (!string.IsNullOrEmpty(number))
            {
                SqlConnection conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True");
                SqlCommand cmd = new SqlCommand("select flag from dbo.countries where number=@number", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@number", number);
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Read();
                context.Response.BinaryWrite((Byte[])dr[0]);
                context.Response.End();
                if (dr != null && !dr.IsClosed)
                    dr.Close();
                conn.Close();
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Argentina.aspx.cs" Inherits="WebApplication6.Argentina" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    <asp:GridView ID="GridView1" runat="server" Height="169px" Width="244px" AutoGenerateColumns="false">
    <Columns>
    <asp:BoundField DataField="number" HeaderText="number" />
    <asp:BoundField DataField="name" HeaderText="name" />
    <asp:BoundField DataField="coach" HeaderText="coach" />
    <asp:BoundField DataField="group_name" HeaderText="group_name" />
    <asp:BoundField DataField="place_number" HeaderText="place_number" />
    <asp:TemplateField HeaderText="flag"><ItemTemplate><img alt="flag" src="Handler.ashx?number=<%# Eval("number") %>" /></ItemTemplate></asp:TemplateField>
    </Columns>
    </asp:GridView>
    </form>
</body>
</html>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace WebApplication6
{
    public partial class Argentina : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("select * from dbo.countries", conn);
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            GridView1.DataSource = dr;
            GridView1.DataBind();
        }
    }
}
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622198
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty, не умеете пользоваться, не беда, покажу один трюк
делаем пустую страницу
Код: html
1.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="image.aspx.cs" Inherits="WebApplication1.image" %>


в обработчике жизненного цикла пишем что захотим
в данном случае вытаскиваю картинку из ресурсов

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
   public partial class image : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.BinaryWrite((byte[]) TypeDescriptor.GetConverter(typeof(Bitmap)).ConvertTo(Properties.Resources.MyImage,typeof(byte[])));
           Response.End();
          
        }
    }


и в любом месте можно пользоваться <img src="image.aspx"/>
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622242
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу простить мне мою глупость. Только учусь языку и не совсем пока понимаю, что я должен передавать в ConvertTo? В Вашем примере это картинка из ресурсов. У меня несколько десятков файлов в бинарном коде в базе данных, которые я должен поместить в gridview.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622247
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,
да ниче не надо, там ваш код должен быть, или как там у вас..
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public partial class image : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string number = Request.QueryString["number"];
            if (!string.IsNullOrEmpty(number))
            {
                SqlConnection conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True");
                SqlCommand cmd = new SqlCommand("select flag from dbo.countries where number=@number", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@number", number);
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Read();
                Response.BinaryWrite((Byte[])dr[0]);
                Response.End();
              
            }
        }
    }
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622269
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал так как вы сказали.
Все равно картинки не отображаются в gridview...
В чем может быть проблема?
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622280
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,
у вас код то отрабатывает? покажите реальную разметку в браузере, что у вас там нагенерилось..
ctrl - u
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622288
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,
ну тут src="Handler.ashx?number=<%# Eval("number") %>" должно стоять src="image.aspx?number=<%# Eval("number") %>"
если от хендлера отказались...
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622318
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty, в твоем коде несколько недочетов.

1) Ты забыл открыть соединение с БД в методе ProcessRequest();
2) Так как ты возвращаешь картинку, то нужно указать mime-тип в ответе. Для разных форматов он разный: image/gif, image/jpeg, image/png и т.д. Если формат единый, то всё просто. Если разный, то придется добавлять поле в БД с форматом картинки. Ну или если имя файла в БД хранится, то можно по расширению определять.

Cоветую переписать метод вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public void ProcessRequest(HttpContext context)
{
	string number = context.Request.QueryString["number"];
	if (string.IsNullOrEmpty(number)) ThrowNotFound();
	
	using (var conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True"))
	{
		var cmd = new SqlCommand("select flag from dbo.countries where number=@number", conn);
		cmd.CommandType = CommandType.StoredProcedure;
		cmd.Parameters.AddWithValue("@number", number);
		conn.Open();
		using (SqlDataReader dr = cmd.ExecuteReader())
		{
			if (!dr.Read()) ThrowNotFound();
			
			context.Response.ContentType = "image/jpeg";
			context.Response.BinaryWrite((byte[])dr[0]);
		}
	}
}

private static void ThrowNotFound()
{
	throw new HttpException(404, "Not found");
}


Обрати внимание на генерацию HttpException с кодом 404 чтобы обработчик вел себя по правилам http протокола.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622320
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степине умеете пользоваться, не беда, покажу один трюк
делаем пустую страницу
...
в обработчике жизненного цикла пишем что захотим
Трюк хороший и может пригодится, но лучше не давать таких советов начинающим. Пусть научится правильно делать сначала.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622428
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,

Поправил handler. Результат остался отрицательный. В браузере нижестоящая разметка.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form method="post" action="WebForm1.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTk5MTc5NzczOQ9kFgICAw9kFgICAQ88KwARAwAPFgQeC18hRGF0YUJvdW5kZx4LXyFJdGVtQ291bnQCAWQBEBYAFgAWAAwUKwAAFgJmD2QWBAIBD2QWDGYPDxYCHgRUZXh0BQExZGQCAQ8PFgIfAgUBMWRkAgIPDxYCHwIFATFkZAIDDw8WAh8CBQExZGQCBA8PFgIfAgUBMWRkAgUPZBYCZg8VAQExZAICDw8WAh4HVmlzaWJsZWhkZBgBBQlHcmlkVmlldzEPPCsADAEIAgFkRLhntZIQGVIUJhp+2fbcnl2uOaHYd71cFkHkoYHIKvg=" />
</div>

    <div>
    
    </div>
    <div>
	<table cellspacing="0" rules="all" border="1" id="GridView1" style="height:169px;width:244px;border-collapse:collapse;">
		<tr>
			<th scope="col">number</th><th scope="col">name</th><th scope="col">coach</th><th scope="col">group_name</th><th scope="col">place_number</th><th scope="col">flag</th>
		</tr><tr>
			<td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td><img alt="flag" src="Handler1.ashx?number=1" /></td>
		</tr>
	</table>
</div>
    </form>
</body>
</html>
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622457
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,

сам по себе - хэндлер - работает?
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622682
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,

Глупый вопрос: как проверить работоспособность именно handler'a? При запуске список директорий открывается.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622688
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,
че там глупого, встань точкой останова в хендлере, да запусти страницу, если выкинет то ок.
Но судя по коду, имхо, навряд ли..
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622752
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,
автор и уже второй день безуспешно пытаюсь реализовать
третьи сутки - пылают станицы (с)
ох..й КПД
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622773
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty,

... а почему у вас в хендлере тип команды StoredProcedure?
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38622805
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lotyИзопропил,

Глупый вопрос: как проверить работоспособность именно handler'a? При запуске список директорий открывается.
если в адресной строке броузера вместо WebForm1.aspx написать Handler1.ashx?number=1

картинка появляется?
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38623277
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikloty, ... а почему у вас в хендлере тип команды StoredProcedure?
Правильный вопрос. Я это проглядел.

loty, удали строку - cmd.CommandType = CommandType.StoredProcedure; - и попробуй обратиться к handler1.ashx напрямую, как советует Изопропил.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38623303
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже понял уже свою ошибку по поводу CommandType, поэтому код немного переделал.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

namespace WebApplication6
{
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string number = context.Request.QueryString["number"];
            if (!string.IsNullOrEmpty(number)) ThrowNotFound();
            using (var conn = new SqlConnection("Data Source=AlexPC;Initial Catalog=football;Integrated Security=True"))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "[pic]";
                cmd.Parameters.Add("@number", SqlDbType.Int);
                cmd.Parameters["@number"].Value = Convert.ToInt32(number);
                conn.Open();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    if (!dr.Read()) ThrowNotFound();
                    context.Response.ContentType = "image/jpeg";
                    context.Response.BinaryWrite((byte[])dr[0]);
                }
            }
        }
        

        private static void ThrowNotFound()
        {
            throw new HttpException(404, "NotFound");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


Что имеется теперь. При подстановке Handler1.ashx?number=1 или Handler1.ashx в строку браузера выскакивает ошибка 404.
Если здесь
Код: c#
1.
cmd.Parameters["@number"].Value = Convert.ToInt32(number);

вместо
Код: c#
1.
Convert.ToInt32(number)

подставить любое другое значение (int, string) и затем в браузере WebForm.aspx заменить на Handler1.aspx (если менять на Handler1.ashx?number=1 тоже 404 ошибка) то картинка появляется.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38623312
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazilecarrotikloty, ... а почему у вас в хендлере тип команды StoredProcedure?
Правильный вопрос. Я это проглядел.

loty, удали строку - cmd.CommandType = CommandType.StoredProcedure; - и попробуй обратиться к handler1.ashx напрямую, как советует Изопропил.

Проверил сейчас этот вариант. Картинка отображается при подстановке Handler1.ashx?number=1.
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38623316
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loty, значит теперь должна отображаться и на aspx странице
...
Рейтинг: 0 / 0
Подгрузка картинок из sql server в gridview
    #38623331
loty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, все, понял свои ошибки. Все работает. Всем большое спасибо за помощь! Тему можно закрывать.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подгрузка картинок из sql server в gridview
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]