Usuário com melhor resposta
Gravar imagem no arquivo MySQL

Pergunta
-
Tenho um aplicativo WebForm com base de dados MySQL onde os cliente tem cadastro normal e também o respectivo logotipo.
A rotina que estou usando retorna gravado com sucesso porém nada é colocado no arquivo.
Já usei tres formatos de parâmetros e nenhum funcionou. Segue também na rotina os parâmetros que já usei sem resultado.
Essa é minha rotina:
Sou muito grato pela ajuda.
Private Sub SalvaImagem(img As String)
Dim connection As New MySqlConnection
Dim command As New MySqlCommand
Dim Logo As Image = Image.FromFile(img)
Dim MySQL As String = "UPDATE empresa SET logotipo = @Imagem WHERE idEmpresa = " & IDEmpresa
Try
connection = Rotinas.Conectar
command.Connection = connection
connection.Open()
command = New MySqlCommand(MySQL, connection)
command.CommandText = MySQL
'FORMATO DE PARÂMETRO 1
'command.Parameters.Add(New MySqlParameter("@Imagem", MySqlDbType.MediumBlob)).Value = Tratar(img)
'FORMATO DE PARÂMETRO 2
Using Imagem As Image = Image.FromFile(img)
Using stream As New IO.MemoryStream
Imagem.Save(stream, Imaging.ImageFormat.Png)
command.Parameters.Add(New MySqlParameter("@Imagem", MySqlDbType.MediumBlob, img.Length, ParameterDirection.Input, False, 0, 0, Nothing, DataRowVersion.Current, stream.GetBuffer()))
End Using
End Using
'FORMATO DE PARÂMETRO 3
'Using Imagem As Image = Image.FromFile(img)
' Using stream As New IO.MemoryStream
' Imagem.Save(stream, Imaging.ImageFormat.Png)
' command.Parameters.Add(New MySqlParameter("@Imagem", MySqlDbType.MediumBlob)).Value = stream.GetBuffer()
' End Using
'End Using
Dim qtdOK As Integer = command.ExecuteNonQuery()
If qtdOK > 0 Then
StatusLabel.Text = "Logotipo carregado com sucesso."
Else
StatusLabel.Text = "Não carregou o logotipo."
End If
Catch myerror As MySqlException
MessageBox.Show("Database Error: " & myerror.Message, "Configura", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show("Error: " & ex.Message, "Configura", MessageBoxButtons.OK, MessageBoxIcon.Information)
Finally
command.Parameters.Clear()
connection.Close()
command.Dispose()
connection.Dispose()
End Try
End Sub
Respostas
-
Descobri. A base de dados foi gerada corrompida. Deletei a base e criei novamente.
Todas os três formatos do meu exemplo executou e gravou perfeitamente.
Obrigado.
- Sugerido como Resposta Juliano Nunes Silva Oliveira domingo, 29 de outubro de 2017 17:33
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 30 de outubro de 2017 09:37
Todas as Respostas
-
Qual o conteúdo do parâmetro img? É a imagem em base64? Caminho para a imagem no servidor?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
Olá Juliano, boa tarde. Obrigado pela sua atenção.
A imagem é um Logo.png de 16k.
A imagem está no computador do cliente, eu uso o FileUpload para localizar e pegar o endereço físico dela no cliente.
Esse endereço físico é o parâmetro que a rotina SalvaImagem(img As String) recebe e depois para para essa função:
Function Tratar(ByVal img As String) As Byte()
Dim fs As FileStream
Dim br As BinaryReader
fs = New FileStream(img, FileMode.Open, FileAccess.Read)
br = New BinaryReader(fs)
Return br.ReadBytes(CType(fs.Length, Integer))
br.Close()
fs.Close()
End Function -
Descobri. A base de dados foi gerada corrompida. Deletei a base e criei novamente.
Todas os três formatos do meu exemplo executou e gravou perfeitamente.
Obrigado.
- Sugerido como Resposta Juliano Nunes Silva Oliveira domingo, 29 de outubro de 2017 17:33
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 30 de outubro de 2017 09:37