Search code examples
vb.netimagepicturebox

How to add image from database to PictureBox?


I am using this to get image bytes from the database

cmd.CommandText = "select imagedate from projectimages where imagename = '" + _
    ListBox1.Text + "' and CSVprojectref=checksum('" + textboxFileRef.Text + "')"

Dim img As Object = cmd.ExecuteScalar()

Now how can I add this to PictureBox.image. I am having a lot of trouble retrieving the image and displaying it in the PictureBox.

The datatype is Image in sql database and i use this code to save image to db

         Dim ms As New IO.MemoryStream

        If imageFilename.Contains("jpeg") Or imageFilename.Contains("jpg") Then
            imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)

        End If
        If imageFilename.Contains("png") Then
            imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
        End If
        If imageFilename.Contains("gif") Then
            imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
        End If
        If imageFilename.Contains("bmp") Then
            imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
        End If

        Dim bytes() As Byte = ms.ToArray
        Dim img As String = Convert.ToBase64String(bytes)


        Dim cmd As New OleDb.OleDbCommand("insert projectimages values('" + imageNameTemp + "','" + img + "',CHECKSUM('" + textboxFileRef.Text + "'))", con)
        cmd.ExecuteNonQuery()

Solution

  • After 5-6 hours of searching forums and blogs and everything i fond this... to save image to database

    1- datatype should be image in database

    Now add this code when storing image to the sql database

        OpenFileDialog1.ShowDialog()
        imageFilename = OpenFileDialog1.FileName
        Dim imageUpload As Image
        imageUpload = Image.FromFile(OpenFileDialog1.FileName)
    
    
    
        If imageFilename <> "" Then
    
            Dim imageNameTemp As String
    
            imageNameTemp = imageFilename
    
            While (imageNameTemp.Contains("\"))
    
    
                imageNameTemp = imageNameTemp.Remove(0, imageNameTemp.IndexOf("\") + 1)
            End While
    
            Dim ms As New IO.MemoryStream
    
            If imageFilename.Contains("jpeg") Or imageFilename.Contains("jpg") Then
                imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
    
            End If
            If imageFilename.Contains("png") Then
                imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
            End If
            If imageFilename.Contains("gif") Then
                imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
            End If
            If imageFilename.Contains("bmp") Then
                imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
            End If
    
            'Dim cmd As New SqlCommand("INSERT INTO projectimages (imagename,imagedate,csvprojectref) VALUES ('" + imageFilename + "',@BLOBData,CHECKSUM('" + textboxFileRef.Text + "'))", con)
    
            Dim b() As Byte = ms.ToArray()
    
            Dim cmd As New SqlCommand("INSERT INTO projectimages (imagename,imagedate,csvprojectref) VALUES ('" + imageNameTemp + "',@BLOBData,CHECKSUM('" + textboxFileRef.Text + "'))", con)
    
            cmd.Parameters.Add("@BLOBData", SqlDbType.Image, b.Length).Value = b
            '    Dim cmd As New SqlCommand("insert projectimages(imagename,imagedate,csvprojectref) values('imagma','" + img + "',CHECKSUM('" + textboxFileRef.Text + "'))", con)
    
            cmd.ExecuteNonQuery()
    
            '  cmdTemp.Parameters.Add("@photo", SqlDbType.Image, b.Length).Value = b
    
        End If
    

    And when to retrieve data to insert into picture box use this code...

      cmd.CommandText = "select imagedate from projectimages where imagename = '" +      ListBox1.Text + "' and CSVprojectref=checksum('" + textboxFileRef.Text + "')"
    
    
            cmd.Connection = con
            Dim da As New SqlDataAdapter(cmd)
            Dim ds As New DataSet()
            da.Fill(ds, "projectimages")
            Dim c As Integer = ds.Tables(0).Rows.Count
            If c > 0 Then
                Dim bytBLOBData() As Byte = _
                    ds.Tables(0).Rows(c - 1)("imagedate")
                Dim stmBLOBData As New MemoryStream(bytBLOBData)
                PictureBox1.Image = Image.FromStream(stmBLOBData)
            End If