无法使用通用处理程序将数据库中的图像文件显示到图像控件中

时间:2013-03-19 11:54:28

标签: c# asp.net

我需要帮助将显示在我的数据库中的图像文件显示到 图像控制。我已经阅读了一些文章,并观看了一些完美的视频教程,我遵循了它,但我无法使它工作。图像控件只显示空白。我使用Generic Handler从我的数据库中检索图像文件。请帮我指出我哪里出错?感谢您的帮助......这是我的代码。

Generic Handler

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

using System;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;

public class ShowImage : IHttpHandler 
{

    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.QueryString["ID"] == null) return;
        //string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
        string connStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Coldwind.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        string ID = context.Request.QueryString["ID"];


        using (SqlConnection conn = new SqlConnection(connStr))
        {
             using (SqlCommand cmd = new SqlCommand("Select Photos From ProfileTab Where ID =" + ID, conn))
             {
                 //cmd.Parameters.Add(new SqlParameter("@ID",ID));
                 conn.Open();
                 using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                 {
                     reader.Read();
                     context.Response.ContentType = "image/jpeg";
                     context.Response.BinaryWrite((Byte[])reader[reader.GetOrdinal("Photos")]);
                     // byte[] imgData = (byte[])reader["Photos"];
                     // context.Response.BinaryWrite(imgData);
                     reader.Close();
                 }
             }
         }
     } 


     public bool IsReusable
     {
         get
         {
             return true;
         }
     }

}

用于图像控制的Asp.Net代码

<asp:Image ID="Image1" runat="server" ImageUrl='<%# "ShowImage.ashx?ID=" + Eval("ID") %>' Height="128px" />

1 个答案:

答案 0 :(得分:0)

尝试使用MemoryStream ......

System.IO.MemoryStream dataStream = null;
dataStream = new System.IO.MemoryStream(reader.GetOrdinal("Photos"));
context.Response.ContentType = "image/jpeg";
dataStream.WriteTo(context.Response.OutputStream);
dataStream.Close();
dataStream = null;