0

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
4

1 に答える 1

1

UPDATE ステートメントは、INSERTa のように VALUES 句を使用しません。UPDATE ステートメントは次のようになります。

...

sql = "UPDATE image_in_db SET image_data = @image_data WHERE id = @imaage_id"
sql_command.Parameters.AddWithValue("@image_id", 1)
sql_command.Parameters.AddWithValue("@image_data", arrImage)
sql_command.ExecuteNonQuery()

...
于 2013-09-16T03:12:29.040 に答える