In this article I will explain with an example, how to upload and save (insert) multiple files 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 files. 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.
	
	
		 
	
		
			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.
	
	
		 
	
		
			<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 and inserting multiple files 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 file as Binary data in the SQL Server Database.
	
		The name of the file, the content type (MIME type) and the actual file 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 files 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
	
	
		 
	
		 
	
		Downloads