下面的代码将图片从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
答案 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()
...