Как получить несколько изображений из базы данных с помощью C # - PullRequest
3 голосов
/ 16 мая 2011

У меня есть база данных из 9 изображений, которые постоянно меняются, поэтому я не могу напрямую установить тег src в html <img> для отображения 9 изображений, я должен выбрать их из базы данных и связать их соответствующим образом.

Я могу получить и распечатать 1 изображение, используя Response.BinaryWrite(), но не все 9. Мой byte[] получает только 1-е изображение из БД,

, вот код,

            while (dr.Read())
            {
                Response.ContentType = "image/jpg";
                Response.BinaryWrite((byte[])(dr["fsImage"]));

            }

Как получить все 9 изображений и как их привязать либо к тегу <asp:Image>, либо динамически создать тег html <img>

Я новичок, поэтому, пожалуйста,Полегче на меня, если есть глупые ошибки;)

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Нельзя, чтобы веб-страница содержала содержимое всех изображений.

Для «динамического» рендеринга изображения вам нужно создать страницу, которая даст вам одно изображение. На этой странице будет использоваться код, подобный тому, что у вас есть выше.

Затем выберите изображение, которое будет отображать URL-адрес страницы, например

.
http://youdomain/makeimage.aspx?imageid=1

и

http://youdomain/makeimage.aspx?imageid=2

Код в make image возвращает одно изображение.

Примечание - вы будете намного счастливее, если сделаете URL

http://youdomain/makeimage.aspx?imageid=1&mytype=.jpg

Таким образом, URL-адрес изображения заканчивается в расширении. Некоторые браузеры (IE) обманывают и смотрят на конец строки, чтобы увидеть, какой тип содержимого ожидать. Они будут работать с URL-адресом, как показано выше, но не без пробного .jpg.

Кроме того, вам нужно будет реализовать какую-то форму кэширования, так как ваша производительность будет собакой (особенно если вы попытаетесь масштабировать ее).

Удачи.

1 голос
/ 16 мая 2011

Используйте HttpHandler и вызовите тег Img

один пример

<%@ WebHandler Language="C#" Class="Handler2" %>

using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;


public class Handler2 : IHttpHandler {


    public void ProcessRequest(HttpContext context)
    {

        if (context.Request.QueryString["pid"] != null)
        {
            string ID = context.Request.QueryString["pid"].ToString();

            if (dt.Rows.Count > 0)
            {
                int pid = Convert.ToInt32(ID);
                SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
                myConnection.Open();
                //int i = Convert.ToInt32(context.Request.QueryString["id"]);
                string sql = "Select BackGroundImage from Wall_BackgrndImg_Master where FK_Company_Master=@ImageId";
                SqlCommand cmd = new SqlCommand(sql, myConnection);
                cmd.Parameters.Add("@ImageId", SqlDbType.Int).Value = pid;
                cmd.Prepare();
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Read();
                try
                {
                    context.Response.ContentType = "jpg";
                    context.Response.BinaryWrite((byte[])dr["BackGroundImage"]);
                    dr.Close();
                    myConnection.Close();
                }
                catch
                {

                }
            }
        }

    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

и звоните как

    <img src="~/handlor.ashx?pid=1">
<img src="~/handlor.ashx?pid=2">
<img src="~/handlor.ashx?pid=3">
<img src="~/handlor.ashx?pid=4">
<img src="~/handlor.ashx?pid=5">
...