如何使用c#从数据库中检索多个图像

时间:2011-05-16 11:09:23

标签: c# asp.net database image sqldatareader

我有一个包含9个图像的数据库,这些数据不断更改,因此我无法直接在html src标记中设置<img>来显示9个图像,我必须从数据库中选择它们并绑定他们因此。

我可以使用Response.BinaryWrite()检索和打印1张图片,但不是全部9.我的byte[]只获取数据库中的第一张图片,

这是代码,

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

            }

如何检索所有9张图片,以及如何将它们绑定到<asp:Image>标记或动态构建html <img>标记

我是新手,所以如果有愚蠢的错误,请放轻松我;)

提前致谢。

2 个答案:

答案 0 :(得分:2)

您无法让网页提供所有图片的内容。

为了“动态”渲染图像,您需要制作一个可以为您提供单个图像的页面。此页面将使用您上面的代码。

然后选择哪个图像显示页面的网址会改变,例如

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

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

make image中的代码将返回单个图像。

注意 - 如果你制作网址,你会更开心

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

因此使图像url在扩展名中结束。一些浏览器(IE)作弊并查看字符串的结尾以查看期望的内容类型。他们将使用上面的网址,但不是没有试用.jpg。

此外,您需要实施某种形式的缓存,我们的表现将是一只狗(特别是如果您尝试扩展的话。)

祝你好运。

答案 1 :(得分:1)

使用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">