Click here to Skip to main content
11,412,516 members (73,714 online)
Click here to Skip to main content

Video Uploader Control for SQL Server

, 28 Nov 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
Upload and insert video, audio, or image to SQL Server, and show it in an ASPX page.


This article will explain how to upload and insert files into SQL Server (specially audio, video, and image files) using C# and ADO.NET, and then how to show the video file in an ASP.NET page with a player control.


Before we start, I don't know what is better, uploading files to a database or uploading files to a server system and storing only their paths in the database. Well, I think, if those files are small in size (like images), I'd prefer to store them in the database, but if they are large (I don't have a number), then I think this will take time with the stream while reading and writing binary data (I'd like to know about your experience).


  • Create a table in a SQL Server database that will store the file data, file name, and file size.
  • ID Int
    Video varbinary(MAX)
    Video_Name nvarchar(50)
    Video_Size bigint
  • In the control, add a FileUpload control, a Button, a Label.
  • Add the control to your page.

Using the code

The idea when uploading a file to a database is to convert it to bytes. Converting a file to bytes is easy by getting the HTTPPostedFile and read it with a stream to bytes, then inserting them in a varbinary column in SQL Server (in the case of video or audio files) or an image column (in the case of images).

using System.IO;
using System.Data.SqlClient;

public partial class UploadVideo : System.Web.UI.UserControl
    protected void Page_Load(object sender, EventArgs e)

    byte[] buffer;
    //this is the array of bytes which will hold the data (file)

    SqlConnection connection;
    protected void ButtonUpload_Click(object sender, EventArgs e)
        //check the file

        if (FileUpload1.HasFile && FileUpload1.PostedFile != null 
            && FileUpload1.PostedFile.FileName != "")
            HttpPostedFile file = FileUpload1.PostedFile;
            //retrieve the HttpPostedFile object

            buffer = new byte[file.ContentLength];
            int bytesReaded = file.InputStream.Read(buffer, 0, 
            //the HttpPostedFile has InputStream porperty (using System.IO;)
            //which can read the stream to the buffer object,
            //the first parameter is the array of bytes to store in,
            //the second parameter is the zero index (of specific byte)
            //where to start storing in the buffer,
            //the third parameter is the number of bytes 
            //you want to read (do u care about this?)

            if (bytesReaded > 0)
                    string connectionString = 
                    connection = new SqlConnection(connectionString);
                    SqlCommand cmd = new SqlCommand
                    ("INSERT INTO Videos (Video, Video_Name, Video_Size)" + 
                     " VALUES (@video, @videoName, @videoSize)", connection);
                        SqlDbType.VarBinary, buffer.Length).Value = buffer;
                        SqlDbType.NVarChar).Value = FileUpload1.FileName;
                        SqlDbType.BigInt).Value = file.ContentLength;
                    using (connection)
                        int i = cmd.ExecuteNonQuery();
                        Label1.Text = "uploaded, " + i.ToString() + " rows affected";
                catch (Exception ex)
                    Label1.Text = ex.Message.ToString();

            Label1.Text = "Choose a valid video file";
//create a sqlcommand object passing the query and the sqlconnection object
//when declaring the parameters you have to be sure 
//you have set the type of video column to varbinary(MAX)

How to select the data and show it on your page

The problem here is that we have to set the src property of the player control, but our file exists in a database, so we need a handler to read the bytes in the database.. The handler idea is awesome! You can call it like: "Handler.ashx?ID=1", and in the handler code, read the video column where the ID column = QueryString["id"].

using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

public class VideoHandler : IHttpHandler 
    public void ProcessRequest (HttpContext context) 
        string connectionString = 

        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("SELECT Video, Video_Name" + 
                         " FROM Videos WHERE ID = @id", connection);
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = 
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.Default);
            if (reader.HasRows)
                while (reader.Read())
                    context.Response.ContentType = reader["Video_Name"].ToString();
    public bool IsReusable 
        get {
            return false;

OK.. how do we show the video?! You can show the video in an ASP.NET Data control. Well, I did an example on the Repeater control. You have to read the data from the SQL Server with a SQL adapter and bind the data source to the Repeater control. Well, here you can specify which videos to select in the datasource..

private DataTable GetSpecificVideo(object i)
//pass the id of the video
    string connectionString = 
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT Video, ID " + 
                             "FROM Videos WHERE ID = @id", connectionString);
    adapter.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = (int)i;
    DataTable table = new DataTable();
    return table;
protected void ButtonShowVideo_Click(object sender, EventArgs e)
    Repeater1.DataSource = GetSpecificVideo(2);
    //the video id (2 is example)


Now, its time for the player control.. In the Repeater (source view), add an ItemTemplate, and set the URL value parameter of the player control to <'%# "VideoHandler.ashx?id=" + Eval("ID") %'>. The ID is the name of the ID column of the data source that the Repeater binds to.

<asp:Button ID="ButtonShowVideo" runat="server" 
   onclick="ButtonShowVideo_Click" Text="Show Video" />

    <asp:Repeater ID="Repeater1" runat="server">
            <object id="player" 
                       height="170" width="300">
                <param name="url" 
                  value='<%# "VideoHandler.ashx?id=" + Eval("ID") %>'/>
                <param name="showcontrols" value="true" />
                <param name="autostart" value="true" />

Hope you found this useful.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Islam ElDemery
Web Developer Business Development Gate
Egypt Egypt
Follow on   Twitter

Comments and Discussions

Questionvedio file Pin
Zrose Kmt at 5-Nov-14 0:19
memberZrose Kmt5-Nov-14 0:19 
QuestionVideo is not loading plz help me Pin
rajeshmuthiah at 14-Jul-14 2:22
memberrajeshmuthiah14-Jul-14 2:22 
QuestionNo good! Pin
emoutlou at 8-Oct-13 6:05
memberemoutlou8-Oct-13 6:05 
QuestionVideo file can't be stored with this code Pin
AvaniSoni at 15-Sep-13 2:19
memberAvaniSoni15-Sep-13 2:19 
Questionshitttttttt Pin
Member 10131751 at 31-Aug-13 10:37
memberMember 1013175131-Aug-13 10:37 
Questionshitttttttt Pin
Member 10131751 at 31-Aug-13 10:36
memberMember 1013175131-Aug-13 10:36 
Questionnot show video Pin
jaimin85 at 12-Aug-13 1:07
memberjaimin8512-Aug-13 1:07 
Questionnot show the video Pin
palawan at 19-Jun-13 3:14
memberpalawan19-Jun-13 3:14 
GeneralMy vote of 3 Pin
Member 10038728 at 18-Jun-13 3:07
memberMember 1003872818-Jun-13 3:07 
GeneralMy vote of 2 Pin
Farzad F Wadia at 30-Mar-13 19:00
memberFarzad F Wadia30-Mar-13 19:00 
QuestionIts Not Working Pin
shalinibharani at 29-Nov-12 0:40
membershalinibharani29-Nov-12 0:40 
QuestionIts Working but.., Pin
srikanth4u at 25-Oct-12 6:04
membersrikanth4u25-Oct-12 6:04 
QuestionError Pin
MustafaIqbal at 29-Aug-12 6:22
memberMustafaIqbal29-Aug-12 6:22 
AnswerRe: Error Pin
Member 9794736 at 17-Feb-13 6:44
memberMember 979473617-Feb-13 6:44 
QuestionVideo uploader control - error in vs2005 Pin
VCSSyed at 23-Jul-12 13:51
memberVCSSyed23-Jul-12 13:51 
AnswerRe: Video uploader control - error in vs2005 Pin
_Amy at 24-Jul-12 0:52
member_Amy24-Jul-12 0:52 
GeneralRe: Video uploader control - error in vs2005 Pin
VCSSyed at 24-Jul-12 1:05
memberVCSSyed24-Jul-12 1:05 
GeneralRe: Video uploader control - error in vs2005 Pin
VCSSyed at 24-Jul-12 1:10
memberVCSSyed24-Jul-12 1:10 
GeneralRe: Video uploader control - error in vs2005 Pin
VCSSyed at 24-Jul-12 1:17
memberVCSSyed24-Jul-12 1:17 
QuestionVideo uploader control - not showing video Pin
VCSSyed at 23-Jul-12 13:45
memberVCSSyed23-Jul-12 13:45 
QuestionVideo not playing Pin
meena2 at 18-Apr-12 1:24
membermeena218-Apr-12 1:24 
Questionhow to save the video file path into database Pin
Member 8723617 at 11-Apr-12 21:47
memberMember 872361711-Apr-12 21:47 
Questiondidn't work Pin
Sara_Mardini at 7-Apr-12 9:33
memberSara_Mardini7-Apr-12 9:33 
AnswerRe: didn't work Pin
_Amy at 24-Jul-12 0:51
member_Amy24-Jul-12 0:51 
Generalhow to play all videos Pin
harikrishnan.vg902 at 21-Feb-12 1:14
memberharikrishnan.vg90221-Feb-12 1:14 
QuestionNot Working Pin
Member 8542666 at 16-Feb-12 2:08
memberMember 854266616-Feb-12 2:08 
Questiongreat.... Pin
Rajesh Biswas at 7-Dec-11 20:28
memberRajesh Biswas7-Dec-11 20:28 
AnswerRe: great.... Pin
saracena at 8-Mar-12 1:17
membersaracena8-Mar-12 1:17 
GeneralRe: great.... Pin
Rajesh Biswas at 3-Jul-12 20:21
memberRajesh Biswas3-Jul-12 20:21 
AnswerRe: great.... Pin
AVINCODE at 13-Mar-13 23:12
memberAVINCODE13-Mar-13 23:12 
Questionnot working on mozila firefox Pin
Member 8229413 at 16-Oct-11 21:25
memberMember 822941316-Oct-11 21:25 
archana jain at 14-Oct-11 0:56
memberarchana jain14-Oct-11 0:56 
Member 8229413 at 16-Oct-11 21:30
memberMember 822941316-Oct-11 21:30 
QuestionVery Worst Pin
AmericanGopi at 7-Aug-11 22:58
memberAmericanGopi7-Aug-11 22:58 
GeneralThis article not working . . . Pin
prabhakarparihar at 5-Mar-11 1:57
memberprabhakarparihar5-Mar-11 1:57 
GeneralMy vote of 3 Pin
Atul Dhiman from Chandigarh, India at 7-Dec-10 21:05
memberAtul Dhiman from Chandigarh, India7-Dec-10 21:05 
GeneralRe: My vote of 3 Pin
John Simmons / outlaw programmer at 8-Dec-10 0:25
memberJohn Simmons / outlaw programmer8-Dec-10 0:25 
GeneralRe: My vote of 3 Pin
Atul Dhiman from Chandigarh, India at 8-Dec-10 19:59
memberAtul Dhiman from Chandigarh, India8-Dec-10 19:59 
GeneralMy vote of 5 Pin
Kanasz Robert at 12-Nov-10 1:34
memberKanasz Robert12-Nov-10 1:34 
Generalvideo uploadin is not wrkin Pin
re.shivangi at 25-Oct-10 2:29
memberre.shivangi25-Oct-10 2:29 
Generalits not working Pin
satish deverkonda at 29-Jul-10 0:03
membersatish deverkonda29-Jul-10 0:03 
Generalmp3 files Pin
Member 4721168 at 5-May-10 6:49
memberMember 47211685-May-10 6:49 
GeneralSupports only .wmv cideo formats Pin
Sandeep N. Pamnani at 6-Apr-10 0:00
memberSandeep N. Pamnani6-Apr-10 0:00 
GeneralRe: Supports only .wmv cideo formats Pin
Sandeep N. Pamnani at 6-Apr-10 0:07
memberSandeep N. Pamnani6-Apr-10 0:07 
GeneralUnable to show videos when hit the button and videos unable to play Pin
Neo Yong Sheng at 7-Feb-10 21:32
memberNeo Yong Sheng7-Feb-10 21:32 
Generalvery nice Pin
OmarGamil at 26-Jan-10 5:02
memberOmarGamil26-Jan-10 5:02 
GeneralVideo works in IE and not in firefox Pin
Member 2097781 at 31-May-09 2:09
memberMember 209778131-May-09 2:09 
GeneralMy videos r nt playing! Pin
fun2code at 4-Feb-09 11:10
memberfun2code4-Feb-09 11:10 
GeneralRe: My videos r nt playing! Pin
meena2 at 18-Apr-12 1:27
membermeena218-Apr-12 1:27 
GeneralNeed help quickly Pin
ravikumarnegala at 15-Oct-08 1:12
memberravikumarnegala15-Oct-08 1:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150427.1 | Last Updated 28 Nov 2007
Article Copyright 2007 by Islam ElDemery
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid