0

下面的代码从图片框中读取图像到内存流中并将其插入到数据库中的 MySQL BLOB 中,运行良好。可以从数据库中检索并在图片框中完美显示(未显示)。顺便说一句,我没有编写该代码,它来自网络上的教程。

我写的更新数据库的位不起作用。我尝试了很多方括号、单引号、双引号的组合,但还没有运气。我从 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 回答