pic ボックスからメモリストリームに画像を読み取り、データベースの MySQL BLOB に挿入する以下のコードは、完全に機能します。データベースから取得して、pic ボックスに表示することは完全に機能します (表示されていません)。余談ですが、そのコードは私が書いたのではなく、ウェブ上のチュートリアルからのものです。
データベースを更新するために書いたビットは機能しません。括弧、一重引用符、二重引用符の多くの組み合わせを試しましたが、まだうまくいきません。CATCH からさまざまなエラー メッセージが表示されます。構文を参照する平易な英語の場合もあれば、バイナリ ダンプの場合もあります。更新が成功したというメッセージが表示された場合、BLOB に書き込まれるのは、更新しようとしている "VALUES(@image_data)" の名前だけです。メモリストリームとファイルの両方から更新しようとしましたが、まだ運がありません。
「rem'd」コードは INSERT に対して完全に機能し、手動で BLOB を更新できますが、実用的ではありません。たとえば、SD-DVD を BD-DVD にアップグレードすると、BLOB が更新され、小さなロゴが変更されます。
炎上する前に、画像を保存するのは良い習慣ではないことを知っていますが、この場合はより実用的だと思います。画像は、datagridview テーブルに読み込まれる小さな 24x11 DVD ロゴです。他のすべての画像はサーバーにファイルとして保存されます (1000 個の画像)。ただし、テスト例はカバー画像を読み取るだけです。
コードを修正したり、より良い方法を提案したりできる人はいますか? ありがとう…。
Private Sub btnUpdate_Click(sender As System.Object, e As System.EventArgs) Handles btnUpdate.Click
Dim FileSize As UInt32
'temp for testing
Dim carjackedfront As String = "8f17cd4a-8dd6-4ec1-9e7b-7f4d50460693"
'get picture from database
Dim nvcCover As String = carjackedfront
'Dim original As Image = Image.FromFile("D:\Pics\ae.jpg")
Dim original As Image = Image.FromFile(mediastorageCovers & nvcCover & pictureformat)
Dim mstream As New System.IO.MemoryStream()
' -----this line saves image from picture box
'pic_box_save.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
' -----This line saves image from file into memory stream
original.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage() As Byte = mstream.GetBuffer()
FileSize = mstream.Length
pic_box_get.Image = Image.FromStream(mstream)
mstream.Close()
MsgBox("File Size = " & FileSize)
Try
sql = "UPDATE image_in_db SET Test = VALUES(@image_Text) WHERE id = '1'"
'sql = "INSERT INTO image_in_db(id, image_data) VALUES(@image_id, @image_data)"
sql_command = New MySqlClient.MySqlCommand(sql, sql_connection)
' sql_command.Parameters.AddWithValue("@image_id", Nothing)
sql_command.Parameters.AddWithValue("@image_data", arrImage)
sql_command.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
MsgBox("Image has been UPDATED.")
End Sub