views:

298

answers:

1

I succeed to upload and image and resize it. Now I want to insert my image's name into the database.

I'm using SQL Server. The table is named images and has two columns, an integer imageid and imagename as string(invarchar(max)). I need the file name saved in the imagename column and imageid must be an identity.

Here's the code I have so far:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Data.SqlClient
Imports System.Data
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnupload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
        Response.Write("Done")
        If (IsPostBack) Then
            HandleUploadedFile()
        End If
    End Sub
    Private Sub HandleUploadedFile()
        ' get the root of the web site 
        Dim root As String = Server.MapPath("~/")

        ' clean up the path 
        If Not root.EndsWith("\") Then
            root += "\"
        End If

        ' make a folder to store the images in 
        Dim fileDirectory As String = root & "Images/"

        ' create the folder if it does not exist 
        If Not System.IO.Directory.Exists(fileDirectory) Then
            System.IO.Directory.CreateDirectory(fileDirectory)
        End If

        ' make a link to the new file 
        Dim link As String = "<a href='Images/{0}' target='_blank'>{1}</a>{2}{3}"

        ' loop through the file in the request 
        For i As Integer = 0 To Request.Files.Count - 1

            ' get the file instance 
            Dim fi As HttpPostedFile = Request.Files.[Get](i)

            ' create a byte array to store the file bytes 
            Dim fileBytes As Byte() = New Byte(fi.ContentLength - 1) {}

            ' fill the byte array 
            Using stream As System.IO.Stream = fi.InputStream
                stream.Read(fileBytes, 0, fi.ContentLength)
            End Using

            ' create a random file name 
            Dim fileName As String = Guid.NewGuid().ToString()

            ' write the original file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & ".jpg", fileBytes)
            litText.Text += String.Format(link, fileName & ".jpg", fileName & " Original", "<br/>", "")

            ' write the resized file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & "_small.jpg", ResizeImageFile(fileBytes, 100))
            litText.Text += String.Format(link, fileName & "_small.jpg", fileName & " Small", "<br/>", "<br/>")

            ' cleanup 
            litText.Visible = True
            fileBytes = Nothing
        Next
    End Sub
    Private Shared Function ResizeImageFile(ByVal imageFile As Byte(), ByVal targetSize As Integer) As Byte()
        Using oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(New MemoryStream(imageFile))
            Dim newSize As Size = CalculateDimensions(oldImage.Size, targetSize)
            Using newImage As New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
                Using canvas As Graphics = Graphics.FromImage(newImage)
                    canvas.SmoothingMode = SmoothingMode.AntiAlias
                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
                    canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
                    canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
                    Dim m As New MemoryStream()
                    newImage.Save(m, ImageFormat.Jpeg)
                    Return m.GetBuffer()
                End Using
            End Using
        End Using
    End Function
    Private Shared Function CalculateDimensions(ByVal oldSize As Size, ByVal targetSize As Integer) As Size
        Dim newSize As New Size()
        If oldSize.Height > oldSize.Width Then
            newSize.Width = CInt((oldSize.Width * (CSng(targetSize) / CSng(oldSize.Height))))
            newSize.Height = targetSize
        Else
            newSize.Width = targetSize
            newSize.Height = CInt((oldSize.Height * (CSng(targetSize) / CSng(oldSize.Width))))
        End If
        Return newSize
    End Function
End Class
+1  A: 

First you need to know your Connection String. since the code is referencing the SQLClient I'll assume you are using SQL Server so you should look here. Next you'll want to use the ExecuteNonQuery method of the SQLCommand object. I've pasted a sample below. You can read more about the SQLCommand object here. And this site covers Insert statements.

Public Sub SaveNameInDatabase(ByVal fileName As String, ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
String query = String.format("INSERT INTO Files_Table (FileName) Values (\"{0}\")",fileName)
        Dim command As New SqlCommand(, connection)
        command.Connection.Open()
        command.ExecuteNonQuery()
    End Using
End Sub
Jeremy