January 2018 : Instructor-led Online Course in ASP.NET Core 2.0. Conducted by Bipin Joshi. Read more...
Registration for January 2018 batch of ASP.NET Core 2.0 instructor-led online course has already started. Conducted by Bipin Joshi. Register today ! Click here for more details.

Uploading and retrieving images from SQL Server

Introduction

Some times we need to store binary data in database. SQL Server provides a special data type called image that can hold such binary data. The examples of binary data include images, documents etc. In this article we will see how we can store and retrieve images in SQL server database

Creating Tables

In order to work with the examples of this article you will need a table in some database. (You may chose to create it in existing database or create a enw database all together) Following table explains structure of the table :
Column NameDatatypePurpose
ID Integer identity column Primary key
IMGTITLE Varchar(50)Stores some user friendly title to identity the image
IMGTYPEVarchar(50)Stores image content type. This will be same as recognized content types of ASP.NET
IMGDATAImageStores actual image or binary data.

Storing images in SQL Server database

In order to store images to the table you will first upload them to your web server from the client browser. You can develop a web form that accepts image title via a TextBox web control and image file via HTML File Server Control. Make sure you set encType attribute of the Form to multipart/form-data.
Stream imgdatastream = File1.PostedFile.InputStream;
int imgdatalen = File1.PostedFile.ContentLength;
string imgtype = File1.PostedFile.ContentType;
string imgtitle = TextBox1.Text;
byte[] imgdata = new byte[imgdatalen];
int n = imgdatastream.Read(imgdata,0,imgdatalen);
string connstr=
((NameValueCollection)Context.GetConfig
("appSettings"))["connstr"];
SqlConnection connection = new SqlConnection(connstr);
SqlCommand command = new SqlCommand
("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)
VALUES ( @imgtitle, @imgtype,@imgdata )", connection );

SqlParameter paramTitle = new SqlParameter
("@imgtitle", SqlDbType.VarChar,50 );
paramTitle.Value = imgtitle;
command.Parameters.Add( paramTitle);

SqlParameter paramData = new SqlParameter
( "@imgdata", SqlDbType.Image );
paramData.Value = imgdata;
command.Parameters.Add( paramData );

SqlParameter paramType = new SqlParameter
( "@imgtype", SqlDbType.VarChar,50 );
paramType.Value = imgtype;
command.Parameters.Add( paramType );

connection.Open();
int numRowsAffected = command.ExecuteNonQuery();
connection.Close();

Retrieving images from database

Now, let us read the images from the database we stored previously. Here, we will output the image directly to the browser. You can instead save it as a file or do whatever you want.
private void Page_Load(object sender, System.EventArgs e)
{
string imgid =Request.QueryString["imgid"];
string connstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = "
+ imgid;
SqlConnection connection = new SqlConnection(connstr);
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
SqlDataReader dr = command.ExecuteReader();
if(dr.Read())
{
	Response.ContentType = dr["imgtype"].ToString();
	Response.BinaryWrite( (byte[]) dr["imgdata"] );
}
connection.Close();
}
In the above code we have opened a connection with our database. We then SELECT images via datareader. Since the image data is binary data we used Response.BinaryWrite instead of normal Response.Write.

I hope you must have found the article interesting.

Keep coding !


Bipin Joshi is a software consultant, an author and a yoga mentor having 22+ years of experience in software development. He also conducts online courses in ASP.NET MVC / Core and Design Patterns. He is a published author and has authored or co-authored books for Apress and Wrox press. Having embraced the Yoga way of life he also teaches Meditation and Mindfulness to interested individuals. To know more about him click here.

Get connected : Twitter  Facebook  Google+  LinkedIn

Posted On : 26 January 2002


Tags : ADO.NET Data Access SQL Server