【问题标题】:How to add image from database to PictureBox?如何将数据库中的图像添加到 PictureBox?
【发布时间】:2011-06-14 21:45:24
【问题描述】:

我正在使用它从数据库中获取图像字节

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

【问题讨论】:

  • 你用的是什么版本的VB?
  • 好的,现在应该让更多人关注。
  • 我在搜索了几个小时后找到了完美的解决方案,有一种特定的方式来存储数据,因此可以完美地检索它。明天将发布答案,因为我无法在 8 小时之前发布我自己的问题的答案。

标签: vb.net image picturebox


【解决方案1】:

经过 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

【讨论】:

    【解决方案2】:

    按照Microsoft 使用 MemoryStream 对象。

    【讨论】:

    • 出现同样的错误...如上“参数无效”
    【解决方案3】:
    Dim img As Byte() = DirectCast(cmd.ExecuteScalar(), Byte())
    Dim ms as MemoryStream = New MemoryStream(img)
    pictureBox.Image = Image.FromStream(ms)
    

    假设 imagedate 字段为blob 字段。

    【讨论】:

    • 此错误参数无效。在 PictureBox1.Image = Image.FromStream(MemoryStreamms)
    • @ConfusedCoder 它必须是Dim ms as MemoryStream。看看这是否能解决错误。
    • 我与这个战斗了 2 小时或更长时间 :(
    • 顺便说一句,你所说的 imagedate 字段是 blob 字段是什么意思?
    • @Con,您是否验证过 ExecuteScalar() 确实得到了图片?
    【解决方案4】:

    这是我在 vb.net 中将 blob 文件显示到图片框的代码。希望对你有帮助

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

    【讨论】:

      【解决方案5】:

      我也收到参数无效错误。为了解决这个问题,我在我的表单中添加了一个图片框,它将我复制到 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2020-03-25
        • 1970-01-01
        相关资源
        最近更新 更多