VB.NET在MySQL中更新BLOB

时间:2013-09-16 01:21:29

标签: mysql vb.net

下面的代码将图片从pic框读入内存流并将其插入数据库中的MySQL BLOB,运行正常。可以从数据库中检索并在pic盒中显示完美的工作(未显示)。只是旁注,我没有编写该代码,而是来自网络上的教程。

我写入UPDATE数据库的位不起作用。我已经尝试了括号,单引号,双引号的许多组合,但还没有运气。我从CATCH获得不同的错误消息,有时用简单的英语引用语法,有时在二进制转储中。当我获得成功的更新消息时,写入BLOB的所有内容都是我尝试更新“VALUES(@image_data)”的名称。我试图从内存流和文件更新,但没有运气。

“rem'd”代码适用于INSERT,我可以手动更新BLOB但不实用。 BLOB会更新,例如当我将SD-DVD升级到BD-DVD时,我会更改小徽标。

在我受到骚扰之前,我知道存储图像并不是很好的做法,但在这种情况下,我认为它更实用。图像是微小的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

1 个答案:

答案 0 :(得分: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()

...