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

私の問題は、プログラムを実行するたびに OUT OF MEMORY と表示されることです。それを解決する方法は?取得している画像のサイズは 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 に答える