Friday, January 30, 2009

Upload and Display Image From MS SQL Server

Upload and Display Image From MS SQL Server


Table Name: ImageGallery

Column : Img_Id,Image_Content,Img_Type,Image_Size




Pages Used: ImageGallery.aspx/.cs , Handler.ashx (to retieve images)





using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.IO;


public partial class ImageGallery : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{


GridView1.DataSource = FetchAllImagesInfo();
GridView1.DataBind();


}

protected void butUpload_Click(object sender, EventArgs e)
{
if (FUP.PostedFile != null && FUP.PostedFile.FileName != "")
{

byte[] myimage = new byte[FUP.PostedFile.ContentLength];
HttpPostedFile Image = FUP.PostedFile;
Image.InputStream.Read(myimage, 0, (int)FUP.PostedFile.ContentLength);

SqlConnection myConnection = new SqlConnection(ConfigurationManager.AppSettings["Constr"].ToString());
SqlCommand storeimage = new SqlCommand("INSERT INTO ImageGallery " + "(Image_Content, Image_Type, Image_Size) "
+ " values (@image, @imagetype, @imagesize)", myConnection);
storeimage.Parameters.Add("@image", SqlDbType.Image, myimage.Length).Value = myimage;
storeimage.Parameters.Add("@imagetype", SqlDbType.VarChar, 100).Value = FUP.PostedFile.ContentType;
storeimage.Parameters.Add("@imagesize", SqlDbType.BigInt, 99999).Value = FUP.PostedFile.ContentLength;
myConnection.Open();
storeimage.ExecuteNonQuery();
myConnection.Close();
}
}

public DataTable FetchAllImagesInfo()
{
string sql = "Select * from ImageGallery";
SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationManager.AppSettings["Constr"].ToString());
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}




Handler.ashx





%@ WebHandler Language="C#" Class="Handler" %

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.IO;

public class Handler : IHttpHandler {


public void ProcessRequest (HttpContext context)
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.AppSettings["Constr"].ToString());
myConnection.Open();
string sql = "Select Image_Content from ImageGallery where Img_Id=@ImageId";
SqlCommand cmd = new SqlCommand(sql, myConnection);
cmd.Parameters.Add("@ImageId", SqlDbType.Int).Value = context.Request.QueryString["id"];
cmd.Prepare();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
//context.Response.ContentType = dr["Image_Type"].ToString();
context.Response.BinaryWrite((byte[])dr["Image_Content"]);
dr.Close();
myConnection.Close();

}



public bool IsReusable {
get {
return false;
}
}

}





in the design add following under th columns:

Columns
asp:TemplateField HeaderText="Image Type"
ItemTemplate
asp:Label ID="lblImType" runat="server" Text='%#Eval("Image_Type") %'asp:Label
ItemTemplate
asp:TemplateField
asp:TemplateField
ItemTemplate
asp:Image ID="Image1" runat="server" ImageUrl='%# "Handler.ashx?id=" + Eval("Img_Id") %'
ItemTemplate
asp:TemplateField

Columns








Thanks,
Nitin Sharma