In this article I will explain with an example, how to upload and save (insert) multiple Images to SQL Server database in ASP.Net using C# and VB.Net.
ASP.Net 4.5 has a new property AllowMultiple for FileUpload control, which allows user to select and upload multiple Images. This property will work only in browsers that support HTML5.
 
 
Database
This article makes use of a table named tblFiles whose schema is defined as follows.
Upload Multiple Images to Database in ASP.Net
 
Note: You can download the database table SQL by clicking the download link below.
         Download SQL file
 
 

HTML Markup
The HTML Markup consists of a FileUpload control, a Button and a GridView control. For the FileUpload control AllowMultiple property is to true.
Note: AllowMultiple is an ASP.Net.Net 4.5 property and is available in Visual Studio 2012, 2013 or higher versions that support HTML5. For more information please refer my article Upload multiple files with ASP.Net 4.5 FileUpload control in Visual Studio 2012 and 2013.
 
<asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="true" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="Upload" />
<hr />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="File Name" />
    </Columns>
</asp:GridView>
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
 
VB.Net
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
 
 
Uploading multiple images to database in ASP.Net
The below event handler gets executed when the Upload Button is clicked, it executes a loop over the FileUpload’s PostedFiles property and saves each Image files as Binary data in the SQL Server Database.
The name of the Image files, the content type (MIME type) and the actual Image files as array of bytes are inserted into the database table.
Note: The Content type (MIME type) is very important while downloading the files as it notifies the browser about type of the File.
 
C#
protected void Upload(object sender, EventArgs e)
{
    foreach (HttpPostedFile postedFile in FileUpload1.PostedFiles)
    {
        string filename = Path.GetFileName(postedFile.FileName);
        string contentType = postedFile.ContentType;
        using (Stream fs = postedFile.InputStream)
        {
            using (BinaryReader br = new BinaryReader(fs))
            {
                byte[] bytes = br.ReadBytes((Int32)fs.Length);
                string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                using (SqlConnection con = new SqlConnection(constr))
                {
                    string query = "insert into tblFiles values (@Name, @ContentType, @Data)";
                    using (SqlCommand cmd = new SqlCommand(query))
                    {
                        cmd.Connection = con;
                        cmd.Parameters.AddWithValue("@Name", filename);
                        cmd.Parameters.AddWithValue("@ContentType", contentType);
                        cmd.Parameters.AddWithValue("@Data", bytes);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                    }
                }
            }
        }
    }
    Response.Redirect(Request.Url.AbsoluteUri);
}
 
VB.Net
Protected Sub Upload(sender As Object, e As EventArgs)
    For Each postedFile As HttpPostedFile In FileUpload1.PostedFiles
        Dim filename As String = Path.GetFileName(postedFile.FileName)
        Dim contentType As String = postedFile.ContentType
        Using fs As Stream = postedFile.InputStream
            Using br As New BinaryReader(fs)
                Dim bytes As Byte() = br.ReadBytes(Convert.ToInt32(fs.Length))
                Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
                Using con As New SqlConnection(constr)
                    Dim query As String = "insert into tblFiles values (@Name, @ContentType, @Data)"
                    Using cmd As New SqlCommand(query)
                        cmd.Connection = con
                        cmd.Parameters.AddWithValue("@Name", filename)
                        cmd.Parameters.AddWithValue("@ContentType", contentType)
                        cmd.Parameters.AddWithValue("@Data", bytes)
                        con.Open()
                        cmd.ExecuteNonQuery()
                        con.Close()
                    End Using
                End Using
            End Using
        End Using
    Next
    Response.Redirect(Request.Url.AbsoluteUri)
End Sub
 
 
Displaying inserted Images from Database in GridView
The GridView is populated with records from the tblFiles table in the Page Load event.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "SELECT Id, Name FROM tblFiles";
            cmd.Connection = con;
            con.Open();
            GridView1.DataSource = cmd.ExecuteReader();
            GridView1.DataBind();
            con.Close();
        }
    }
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Me.BindGrid()
    End If
End Sub
Private Sub BindGrid()
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand()
            cmd.CommandText = "SELECT Id, Name FROM tblFiles"
            cmd.Connection = con
            con.Open()
            GridView1.DataSource = cmd.ExecuteReader()
            GridView1.DataBind()
            con.Close()
        End Using
    End Using
End Sub
 
 
Screenshot
Upload Multiple Images to Database in ASP.Net
 
 
Downloads