Search code examples
asp.netvb.netfile-uploadsql-server-2012varbinarymax

Uploading files to SQL Server 2012 with ASP.NET/VB.NET


I followed a tutorial an ran the below code without any errors. The file "uploads", however no data is inserted into my SQL Server table.

Data should be inserted into the content table.

Content Table:

enter image description here

Document.aspx

Imports System.Data.SqlClient
Imports System.Data
Imports System.IO

Partial Class Documents
    Inherits System.Web.UI.Page

    Protected Sub btnUploadContent_Click(sender As Object, e As EventArgs) Handles btnUploadContent.Click

        Dim filePath As String = FileUpload.PostedFile.FileName

        Dim filename As String = Path.GetFileName(filePath)

        Dim ext As String = Path.GetExtension(filename)

        Dim contenttype As String = String.Empty



        Select Case ext

            Case ".doc"

                contenttype = "application/vnd.ms-word"

                Exit Select

            Case ".docx"

                contenttype = "application/vnd.ms-word"

                Exit Select

            Case ".xls"

                contenttype = "application/vnd.ms-excel"

                Exit Select

            Case ".xlsx"

                contenttype = "application/vnd.ms-excel"

                Exit Select

            Case ".jpg"

                contenttype = "image/jpg"

                Exit Select

            Case ".png"

                contenttype = "image/png"

                Exit Select

            Case ".gif"

                contenttype = "image/gif"

                Exit Select

            Case ".pdf"

                contenttype = "application/pdf"

                Exit Select

        End Select

        If contenttype <> String.Empty Then

            Dim fs As Stream = FileUpload.PostedFile.InputStream

            Dim br As New BinaryReader(fs)

            Dim bytes As Byte() = br.ReadBytes(fs.Length)



            'insert the file into database

            Dim strQuery As String = "INSERT INTO content (content_name, content_type, content_file) VALUES (@Name, @ContentType, @Data)"

            Dim cmd As New SqlCommand(strQuery)

            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename

            cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value() = contenttype

            cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes

            InsertUpdateData(cmd)

            lblMessage.ForeColor = System.Drawing.Color.Green

            lblMessage.Text = "File Uploaded Successfully"

        Else

            lblMessage.ForeColor = System.Drawing.Color.Red

            lblMessage.Text = "File format not recognised." + " Upload Image/Word/PDF/Excel formats"

        End If

    End Sub




    Public Function InsertUpdateData(ByVal cmd As SqlCommand) As Boolean

        Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ConnStringDb1").ConnectionString()

        Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True;")

        cmd.CommandType = CommandType.Text

        cmd.Connection = conn

        Try

            conn.Open()

            cmd.ExecuteNonQuery()

            Return True

        Catch ex As Exception

            Response.Write(ex.Message)

            Return False

        Finally

            conn.Close()

            conn.Dispose()

        End Try

    End Function

End Class

Can anyone tell me what's going on ?

EDIT: Debug Breakpoint @ InsertUpdateData(cmd) :

        SqlDbType.Binary    Binary {1}  System.Data.SqlDbType
+       bytes   {Length=4136752}    Byte()
+       cmd {System.Data.SqlClient.SqlCommand}  System.Data.SqlClient.SqlCommand
+       cmd.Parameters  {System.Data.SqlClient.SqlParameterCollection}  System.Data.SqlClient.SqlParameterCollection

Solution

  • I have created empty database and added table content just like you have and I used code almost the same as you and it worked fine.

    Again, if no exception occurs, please check your connection string and see whether the rows been added to the table in the db specified in connection string. Here is my code (which is working fine), a bit modified from yours:

    Imports System.Data.SqlClient
    Imports System.IO
    
    Public Class _Default
    Inherits System.Web.UI.Page
    
    Protected Sub btnUploadContent_Click(sender As Object, e As EventArgs) Handles btnTest1.Click
    
        Dim fs As Stream = FileUpload.PostedFile.InputStream
    
        Dim br As New BinaryReader(fs)
    
        Dim bytes As Byte() = br.ReadBytes(fs.Length)
    
    
        'insert the file into database
    
        Dim strQuery As String = "INSERT INTO content (content_name, content_type, content_file) VALUES (@Name, @ContentType, @Data)"
    
        Dim cmd As New SqlCommand(strQuery)
    
        cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "filename"
    
        cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value() = "jpg"
    
        cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes
    
        InsertUpdateData(cmd)
    
    End Sub
    
    
    
    
    Public Function InsertUpdateData(ByVal cmd As SqlCommand) As Boolean
    
        Dim conn As New SqlConnection("Data Source=(local);Initial Catalog=test;Integrated Security=True;")
    
        cmd.CommandType = CommandType.Text
    
        cmd.Connection = conn
    
        Try
    
            conn.Open()
    
            cmd.ExecuteNonQuery()
    
            Return True
    
        Catch ex As Exception
    
            Response.Write(ex.Message)
    
            Return False
    
        Finally
    
            conn.Close()
    
            conn.Dispose()
    
        End Try
    
    End Function
    
    End Class
    

    I add sample of SQL to test on DB:

     INSERT INTO [master_db].[dbo].[content]
           ([content_name]
           ,[content_type]
           ,[content_file])
     VALUES
           ('test'
           ,'png'
           ,0x111111111111111)
    
     SELECT * FROM [master_db].[dbo].[content]