データベースへの画像の保存と取得は、プログラミングにおける一般的なタスクです。簡単そうに見えますが、コードが正しく実装されていない場合、問題が発生する可能性があります。この場合、ユーザーが画像をデータベースに保存し、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 サイトの他の関連記事を参照してください。