In this article I will explain with an example, how to use Generic HTTP Handler to display Binary Images from database in ASP.Net using C# and VB.Net.
The Binary Image will be fetched from database and then displayed in Image control with the help of Generic HTTP Handler in ASP.Net using C# and VB.Net.
Note: In order to learn more about saving files as Binary data, please refer my article Save Files to SQL Server Database using FileUpload Control.
 
Binary Images stored in Database
The following screenshot displays database table with three images stored in it. The backup file of the database is present in the attached sample.
Using Generic Handler to display Binary Image from database in ASP.Net
 
 
HTML Markup
The HTML Markup consists of a DropDownList control which will populate the list of image files in database and an Image control to display the selected image.
The DropDownList control has been assigned with SelectedIndexChanged event handler.
<asp:DropDownList ID="ddlImages" runat="server" AppendDataBoundItems="true" AutoPostBack = "true" OnSelectedIndexChanged = "FetchImage">
    <asp:ListItem Text="Select Image" Value="0" />
</asp:DropDownList>
<hr />
<asp:Image ID="Image1" runat="server" Visible = "false"/>
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
 
VB.Net
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
 
 
Populating the List of Images in DropDownList control
Inside the Page Load event, the Images are fetched from database and are assigned to the DropDownList control.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter("SELECT Id, Name FROM tblFiles", con))
            {
                sda.Fill(dt);
                ddlImages.DataSource = dt;
                ddlImages.DataTextField = "Name";
                ddlImages.DataValueField = "Id";
                ddlImages.DataBind();
            }
        }
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As DataTable = New DataTable()
        Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Using con As SqlConnection = New SqlConnection(constr)
            Using sda As SqlDataAdapter = New SqlDataAdapter("SELECT Id, Name FROM tblFiles", con)
                sda.Fill(dt)
                ddlImages.DataSource = dt
                ddlImages.DataTextField = "Name"
                ddlImages.DataValueField = "Id"
                ddlImages.DataBind()
            End Using
        End Using
    End If
End Sub
 
 
The Generic Handler
The following Generic Handler accepts the ID of the Image file through the QueryString parameter and fetches the Binary Data of the Image file from the database using its ID.
Finally the Binary Data is converted into a Byte Array and returned through the response.
C#
<%@ WebHandler Language="C#" Class="Handler" %>
 
using System;
using System.Web;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
 
public class Handler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        int id = 0;
        int.TryParse(context.Request.QueryString["id"], out id);
        if (id > 0)
        {
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                string sql = "SELECT Data, ContentType FROM tblFiles WHERE Id =" + id;
                using (SqlDataAdapter sda = new SqlDataAdapter(sql, con))
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    byte[] bytes = (byte[])dt.Rows[0]["Data"];
                    context.Response.ContentType = dt.Rows[0]["ContentType"].ToString();
                    context.Response.BinaryWrite(bytes);
                    context.Response.End();
                }
            }
        }
    }
 
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
 
VB.Net
<%@ WebHandler Language="VB" Class="Handler" %>
 
Imports System
Imports System.Web
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
 
Public Class Handler : Implements IHttpHandler
   
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim id As Integer = 0
        Integer.TryParse(context.Request.QueryString("id"), id)
        If (id > 0) Then
            Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
            Dim con As SqlConnection = New SqlConnection(constr)
            Dim sql As String = ("SELECT Data, ContentType FROM tblFiles WHERE Id =" & id)
            Dim sda As SqlDataAdapter = New SqlDataAdapter(sql, con)
            Dim dt As DataTable = New DataTable
            sda.Fill(dt)
            Dim bytes() As Byte = CType(dt.Rows(0)("Data"), Byte())
            context.Response.ContentType = dt.Rows(0)("ContentType").ToString
            context.Response.BinaryWrite(bytes)
            context.Response.End()
        End If
    End Sub
 
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
 
End Class
 
 
Displaying the Binary Image from database in Image Control using Generic Handler
The following event handler is executed on the SelectedIndexChanged event of the DropDownList control. The ID of the Image is appended in the URL of the Generic HTTP Handler and the URL is assigned to the Image control.
As soon as the Page is rendered, the Generic HTTP Handler is called and it returns the Image data i.e. Binary data to the Image control which ultimately displays the Image.
C#
protected void FetchImage(object sender, EventArgs e)
{
    string id = ddlImages.SelectedItem.Value;
    Image1.Visible = id != "0";
    Image1.ImageUrl = string.Format("~/Handler.ashx?id={0}", id);
}
 
VB.Net
Protected Sub FetchImage(ByVal sender As Object, ByVal e As EventArgs)
    Dim id As String = ddlImages.SelectedItem.Value
    Image1.Visible = (id <> "0")
    Image1.ImageUrl = String.Format("~/Handler.ashx?id={0}", id)
End Sub
 
 
Screenshot
Using Generic Handler to display Binary Image from database in ASP.Net
 
 
Demo
 
 
Downloads