ホームページ  >  記事  >  データベース  >  データベース BLOB にイメージを効果的に保存および取得するにはどうすればよいですか?

データベース BLOB にイメージを効果的に保存および取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 18:28:02821ブラウズ

How to Effectively Store and Retrieve Images from a Database Blob?

データベース BLOB に画像を保存し、表示のために取得する

問題

データベースへの画像の保存と取得は、プログラミングにおける一般的なタスクです。簡単そうに見えますが、コードが正しく実装されていない場合、問題が発生する可能性があります。この場合、ユーザーが画像をデータベースに保存し、Picturebox コントロールに表示するときに問題が発生しました。

解決策

この問題に対処するために、ユーザーのコードを調べて潜在的な問題を特定しましょう。

データベースへの保存:

ImageStream = New System.IO.MemoryStream
PbPicture.Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Jpeg)
ReDim rawdata(CInt(ImageStream.Length - 1))

コードは、生データを正しい次元で初期化できません。画像バイトを正しく保存するには、画像ストリームの長さに一致するようにサイズを再調整する必要があります:

ReDim rawdata(CInt(ImageStream.Length))

データベースから取得:

Dim ad As New System.IO.MemoryStream(100000)
Dim im As Image = Image.FromStream(ad) * "error occurs here" (see below)

エラーこれは、広告メモリ ストリームが正しく配置されていないか、容量が不十分なために発生します。次のコードはこの問題を修正します:

ad.Position = 0
Dim im As Image = Image.FromStream(ad)

データベースに画像を保存するための作業コード

Dim filename As String = txtName.Text + ".jpg"
Dim FileSize As UInt32

conn.Close()

Dim mstream As New System.IO.MemoryStream()
PbPicture.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage() As Byte = mstream.GetBuffer()

FileSize = mstream.Length
Dim sqlcmd As New MySqlCommand
Dim sql As String
mstream.Close()

sql = "insert into [your table]  (picture, filename, filesize) 
                               VALUES(@File, @FileName, @FileSize)"

Try
    conn.Open()
    With sqlcmd
        .CommandText = sql
        .Connection = conn
        .Parameters.AddWithValue("@FileName", filename)
        .Parameters.AddWithValue("@FileSize", FileSize)
        .Parameters.AddWithValue("@File", arrImage)

        .ExecuteNonQuery()
    End With
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    conn.Close()
End Try

データベースから画像を取得するための作業コード

Dim adapter As New MySqlDataAdapter
adapter.SelectCommand = Cmd

data = New DataTable

adapter = New MySqlDataAdapter("select picture from [yourtable]", conn)
commandbuild = New MySqlCommandBuilder(adapter)
adapter.Fill(data)

Dim lb() As Byte = data.Rows(0).Item("picture")
Dim lstr As New System.IO.MemoryStream(lb)
PbPicture.Image = Image.FromStream(lstr)
PbPicture.SizeMode = PictureBoxSizeMode.StretchImage
lstr.Close()

以上がデータベース BLOB にイメージを効果的に保存および取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。