2013-09-16 4 views
0

Код, который читает изображение из окна pic в memystream и вставляет его в BLOB MySQL в базе данных, отлично работает. Может извлекаться из базы данных, а отображение в блоке pic отлично работает (не показано). Просто примечание, я не писал этот код, это из учебника в Интернете.VB.NET Update BLOB в MySQL

Бит, который я написал в UPDATE, не работает. Я пробовал много комбинаций скобок, одинарных кавычек, двойных кавычек, но пока не повезло. Я получаю сообщения об ошибках от CATCH, иногда на простом английском языке, ссылаясь на синтаксис, а иногда и на двоичный дамп. Когда я получаю сообщение об успешном обновлении, все, что записано в BLOB, является именем того, что я пытаюсь обновить «VALUES (@image_data)». Я попытался ОБНОВИТЬ как из memystream, так и из файла, но пока не повезло.

Код «rem'd» отлично работает для INSERT, и я могу вручную обновить BLOB, но не практично. BLOB будет обновлен, например, при обновлении SD-DVD до BD-DVD, я изменю небольшой логотип.

Прежде чем я начну пылать, я не знаю хорошей практики хранения изображений, но в этом случае это более практично, я считаю. Изображения - это крошечные логотипы DVD 24x11, которые читаются в таблице datagridview, все мои другие изображения хранятся в виде файлов на сервере (из них 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

«Я получаю различные [сообщения об ошибках] от CATCH» - это не полезно. –

ответ

1

Операторы UPDATE не используют предложение VALUES, такое как INSERTa. Ваш оператор 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() 

... 
+0

Спасибо за это, но он возвращает ошибку «Неустранимая ошибка, возникающая во время выполнения команды» – user2760389

+0

@ user2760389 Укажите тип данных перед добавлением параметров – Balamurugan

+0

Я поправлю на это, но все же фатальную ошибку: sql_command.Parameters.AddWithValue («@ image_id», 1). MySqlDbType = MySqlClient.MySqlDbType.Int16 sql_command.Parameters.AddWithValue ("@ image_data", arrImage) .MySqlDbType = MySqlClient.MySqlDbType.Blob – user2760389

Смежные вопросы