In a previous entry I have shown, how to store images to a database table. Now I will show you how to retrieve it and show it on a ASP.Net Image control. There is no straight forward method showing it like “ImageControl.Image = ImageStream….” How ever it can be achieved using a Generic Handler.
Add a ‘Generic Handler’ to your ASP.Net web application. And in this example I will name it as ‘getImageFromDB.ashx’. By default IHttpHandler will be implemented. (ProcessRequest and IsReusable methods will be implemented). And I will add another method called ‘GetImage’ and alter the ‘ProcessRequest’ method. And the finished handler should similar to this:
1: using System;
2: using System.Drawing;
3: using System.Drawing.Imaging;
4: using System.IO;
5: using System.Web;
6: using System.Data;
7: using System.Data.SqlClient;
8:
9: namespace MyWebApplication
10: {
11:
12: public class getImageFromDB : IHttpHandler
13: {
14: public void ProcessRequest(HttpContext context)
15: {
16: context.Response.Clear();
17:
18: if (!String.IsNullOrEmpty(context.Request.QueryString["empID"]))
19: {
20: int id = Int32.Parse(context.Request.QueryString["empID"]);
21:
22: Image image = GetImage(id);
23:
24: context.Response.ContentType = "image/jpeg";
25: image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
26: }
27: else
28: {
29: context.Response.ContentType = "text/html";
30: context.Response.Write("<p>Need a valid id</p>");
31: }
32: }
33:
34: public bool IsReusable
35: {
36: get
37: {
38: return false;
39: }
40: }
41:
42: private Image GetImage(int empID)
43: {
44:
45: MemoryStream memoryStream = new MemoryStream();
46: //Retrieve image from Database to a memeory stream. If you are using a different method, use it and assign the data to the 'memoryStream' variable.
47:
48: string connectionString = "Password=PWD;Persist Security Info=True;User ID=USER;Initial Catalog=SampleDatabase;Data Source=SQLSERVER";
49: using (SqlConnection sqlConnection = new SqlConnection(connectionString))
50: {
51: using (SqlCommand sqlCommand = new SqlCommand("SELECT emp_id, emp_name, emp_image FROM Employee where emp_id = " + empID.ToString(), sqlConnection))
52: {
53: sqlConnection.Open();
54: SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
55:
56: if (sqlDataReader.HasRows)
57: {
58: sqlDataReader.Read();
59: byte[] btImage = (byte[])sqlDataReader["emp_image"];
60:
61: memoryStream = new MemoryStream(btImage, false);
62: }
63: }
64: sqlConnection.Close();
65: }
66: return Image.FromStream(memoryStream);
67: }
68: }
69: }
And you can call the handler and display the image, using the following syntax :
1: private void GetImageFromDatabase(int empID)
2: {
3: imageControl.ImageUrl = "getImageFromDB.ashx?empID=" + empID.ToString();
4: }