在ASP.NET应用程序中,直接将数据库中的图片显示在Image控件上并不像设置静态图片那样简单。通常,需要通过一些间接的方法来实现这一功能。一个常见的解决方案是使用Generic Handler。本文将介绍如何添加一个Generic Handler到ASP.NET Web应用程序,并展示如何通过它从数据库中检索图片并在Image控件上显示。
首先,需要在ASP.NETWeb应用程序中添加一个Generic Handler。在这个示例中,将这个Handler命名为'getImageFromDB.ashx'。默认情况下,它将实现IHttpHandler接口,包括ProcessRequest和IsReusable方法。还将添加一个名为'GetImage'的方法,并修改ProcessRequest方法。
以下是实现Handler的代码示例:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace MyWebApplication
{
public class getImageFromDB : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
if (!String.IsNullOrEmpty(context.Request.QueryString["empID"]))
{
int id = Int32.Parse(context.Request.QueryString["empID"]);
Image image = GetImage(id);
context.Response.ContentType = "image/jpeg";
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
else
{
context.Response.ContentType = "text/html";
context.Response.Write("Need a valid id
");
}
}
public bool IsReusable
{
get { return false; }
}
private Image GetImage(int empID)
{
MemoryStream memoryStream = new MemoryStream();
string connectionString = "Password=PWD;Persist Security Info=True;User ID=USER;Initial Catalog=SampleDatabase;Data Source=SQLSERVER";
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
using (SqlCommand sqlCommand = new SqlCommand("SELECT emp_id, emp_name, emp_image FROM Employee where emp_id = " + empID.ToString(), sqlConnection))
{
sqlConnection.Open();
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
if (sqlDataReader.HasRows)
{
sqlDataReader.Read();
byte[] btImage = (byte[])sqlDataReader["emp_image"];
memoryStream = new MemoryStream(btImage, false);
}
}
sqlConnection.Close();
}
return Image.FromStream(memoryStream);
}
}
}
private void GetImageFromDatabase(int empID)
{
imageControl.ImageUrl = "getImageFromDB.ashx?empID=" + empID.ToString();
}