1

我正在从我的数据库中插入和检索图像。我现在可以插入,但我很难检索文件。我使用 varbinary(max) 作为图像的数据类型。

这是我的插入代码:

Dim ms As New MemoryStream
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Dim img() As Byte
img = ms.ToArray()

cmd.CommandText = "insert into stud values ('" & studno.Text & "', '" & password.Text & "', '" & fname.Text & "', '" & mname.Text & "', '" & lname.Text & "', @img, '" & gender.Text & "', '" & mm.Text & "/" & dd.Text & "/" & yyyy.Text & "', '" & phone.Text & "', '" & address.Text & "', 'Student', '" & secquest.Text & "', '" & answersq.Text & "', '" & TextBox1.Text & "', '" & ComboBox1.Text & "')"

cmd.Parameters.Add("@img", SqlDbType.VarBinary).Value = img

这就是我检索的方式:

con.Open()
cmd.CommandText = "select * from stud where studentno = 'mnb'"
cmd.Connection = con
dr = cmd.ExecuteReader()

While dr.Read()

    studnum.Text = dr.Item("studentno")
    fname.Text = dr.Item("fname")
    mname.Text = dr.Item("mname")
    lname.Text = dr.Item("lname")
    gender.Text = dr.Item("gender")
    section.Text = dr.Item("seccode")
    bday.Text = dr.Item("bday")
    phone.Text = dr.Item("phoneno")
    address.Text = dr.Item("maddress")

    Dim imageData As Byte() = DirectCast(dr("pic"), Byte())
    If Not imageData Is Nothing Then
        Using ms As New MemoryStream(imageData, 0, imageData.Length)
            ms.Write(imageData, 0, imageData.Length)
            PictureBox1.BackgroundImage = Image.FromStream(ms, True)
        End Using
    End If

End While

我的问题是,每当我运行我的程序时,它都会显示内存不足。如何解决?我正在检索的图像大小为 2MB。

我正在使用内存流和我研究过的最常用的文件流。我相信它在某些方面是不同的。

4

2 回答 2

1

该错误是由于 memoryStream 应该一直打开。

要解决此问题,请使用以下函数从字节数组中获取图像

    Public Function byteArrayToImage(byteArrayIn As Byte()) As Image
        Dim img As Image = Nothing           
            Dim ms As New MemoryStream(byteArrayIn, 0, byteArrayIn.Length)
            ms.Write(byteArrayIn, 0, byteArrayIn.Length)
            img = Image.FromStream(ms, True)             
        Return img
    End Function

调用函数填充PictureBox1:

  PictureBox1.Image = byteArrayToImage(imageData)
于 2016-11-06T07:18:07.847 回答
0

试试这个将你的字节数组转换为图像:

Public Function byteArrayToImage(byteArrayIn As Byte()) As Image
   Using mStream As New MemoryStream(byteArrayIn)
       Return Image.FromStream(mStream)
   End Using
End Function
于 2016-11-06T22:51:24.470 回答