Как добавить изображение из базы данных в PictureBox? - PullRequest
3 голосов
/ 15 июня 2011

Я использую это для получения байтов изображения из базы данных

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

Dim img As Object = cmd.ExecuteScalar()

Теперь, как я могу добавить это в PictureBox.image. У меня много проблем с получением изображения и его отображением в PictureBox.

Тип данных: Изображение в базе данных SQL, и я использую этот код для сохранения изображения в БД

         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()

Ответы [ 5 ]

3 голосов
/ 15 июня 2011

После 5-6 часов поиска по форумам и блогам и всего, что мне понравилось ... для сохранения изображения в базу данных

1 - тип данных должен быть изображением в базе данных

Теперь добавьте этот кодпри сохранении изображения в базе данных sql

    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

и при извлечении данных для вставки в графическое окно используйте этот код ...

  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
0 голосов
/ 03 июля 2018

Я также получил ошибку параметра недопустимая.Для исправления я добавил в форму поле для картинок, которое загружает изображение, которое я копирую, на сервер SQL в качестве фонового изображения.Это утверждение кажется ключевым:

PictureBox1.BackgroundImage.Save(ms, PictureBox1.BackgroundImage.RawFormat)

Фактическая загрузка занимает намного больше времени, но я больше не получаю ошибку параметра ... Я думаю, потому что изображения на самом деле являются действительными изображениями сейчас.

        SSScmd.CommandText = "INSERT INTO PreviewSlideshow (Name, Photo) VALUES (@name, @photo)"

        Dim p As New SqlParameter("@photo", SqlDbType.Image)

        For Each CurFile As IO.FileInfo In New IO.DirectoryInfo(sSourcePath).GetFiles

            If CurFile.Name = "Thumbs.db" Then
                'skip
            Else

                If CurFile.Extension = "jpg" Or CurFile.Extension = "png" Then

                    'show the image name on the form
                    ImageName.Text = CurFile.Name

                    SSScmd.Parameters.AddWithValue("@name", ImageName.Text)

                    Dim ms As New MemoryStream()

                    PictureBox1.BackgroundImage = Image.FromFile(sSourcePath & CurFile.Name)

                    PictureBox1.BackgroundImageLayout = ImageLayout.Stretch

                    PictureBox1.BackgroundImage.Save(ms, PictureBox1.BackgroundImage.RawFormat)

                    Dim data As Byte() = ms.GetBuffer()

                    p.Value = data

                    SSScmd.Parameters.Add(p)

                    SSScmd.ExecuteNonQuery()

                    SSScmd.Parameters.Clear()



                End If
            End If

        Next
0 голосов
/ 01 сентября 2013

вот мой код, чтобы показать файл BLOB в picturebox в vb.net.надеюсь, это поможет

Dim connstring As String = "Database=pmk;data source=localhost;user id=root;password="
Dim Sql As String = "select * from mastermahasiswa where Nim='" & TextBox1.Text & "'"
Dim conn As New MySqlConnection(connstring)
Dim cmd As New MySqlCommand(Sql, conn)
Dim dr As MySqlDataReader = Nothing
conn.Open()
dr = cmd.ExecuteReader()
dr.Read()
Dim imagebytes As Byte() = CType(dr("Foto"), Byte())
Using ms As New IO.MemoryStream(imagebytes)
    PictureBox1.Image = Image.FromStream(ms)
    PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
End Using
conn.Close()
0 голосов
/ 15 июня 2011
Dim img As Byte() = DirectCast(cmd.ExecuteScalar(), Byte())
Dim ms as MemoryStream = New MemoryStream(img)
pictureBox.Image = Image.FromStream(ms)

при условии, что поле воображаемого поля равно blob.

0 голосов
/ 15 июня 2011

Используйте объект MemoryStream согласно Microsoft .

...