VB
.NET - Inserindo imagem em um banco de dados (dica
rápida)
Esta é uma pergunta recorrente em muitos fóruns : Como inserir uma imagem em um banco de dados ?
Do que você vai precisar ?
Crie um banco de dados ou utilize um banco de dados já existente para o qual deseja incluir a imagem.
Você pode usar o script SQL abaixo com exemplo para criar a tabela onde vai incluir a imagem:
CREATE TABLE [dbo].[Impressoes] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Imagem] IMAGE NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); |
Abra o Visual Studio 2012 Express for desktop e crie um novo projeto do tipo Windows Forms Application com o nome ImagemDB;
No formulário form1.vb inclua os seguintes controles a partir da ToolBox:
O leiaute do formulário é mostrado a seguir:
![]() |
O projeto irá usar dois namespaces:
Imports
System.Data.SqlClient
Imports System.IO
Vamos definir uma variável privada referente a imagem a ser armazenada no banco de dados:
Private ImageAUsar As Image
Vamos ao código:
1- Para escolher uma imagem a ser salva
Private Sub btnObterImagem_Click(sender As Object, e As EventArgs) Handles btnObterImagem.Click Using OFD As New OpenFileDialog With {.Filter = "Jpg (*.jpg)|*.jpg"} If OFD.ShowDialog = DialogResult.OK Then ImageAUsar = Image.FromFile(OFD.FileName) picImagem.Image = ImageAUsar End If End Using End Sub |
Usamos um OpenFileDialog para permitir que o usuário escolha uma imagem no sistema de arquivos.
2- Para salvar a imagem escolhida
Private Sub btnSalvarImagem_Click(sender As Object, e As EventArgs) Handles btnSalvarImagem.Click Try Using con As New SqlConnection("Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True") Using com As New SqlCommand("Insert into Impressoes(Imagem) values (@Imagem)", con) Using ms As New IO.MemoryStream ImageAUsar.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg) Dim byteArray = ms.ToArray com.Parameters.AddWithValue("@Imagem", byteArray) con.Open() com.ExecuteNonQuery() End Using End Using End Using Catch ex As Exception MessageBox.Show(" Erro " & ex.Message) End Try End Sub |
A tabela Impressoes do SQL Server LocalDB possui um campo chamado Imagem onde iremos salvar a imagem selecionada usando o comando ExecuteNonQuery().
Nota: SQL Server Express LocalDB é uma versão leve do SQL Server que tem muitas características de programação de um banco de dados SQL Server. O SQL Server Express LocalDB é executado no modo de usuário e tem uma instalação rápida sem a necessidade de configuração.
3- Para recuperar uma imagem do banco de dados pelo seu Id
Private Sub btnRecuperarImagem_Click(sender As Object, e As EventArgs) Handles btnRecuperarImagem.Click Try Dim oValor As String = InputBox("Informe o código da Imagem", "Recupera Imagens", "1", 400, 400) If String.IsNullOrWhiteSpace(oValor) Then Exit Sub End If Using con As New SqlConnection("Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True") Using com As New SqlCommand("Select Imagem from Impressoes where ID=@ID", con) com.Parameters.AddWithValue("@ID", Convert.ToInt32(oValor)) con.Open() Dim tempImagem As Byte() = DirectCast(com.ExecuteScalar(), Byte()) If tempImagem Is Nothing Then MessageBox.Show("Imagem não localizada", "Erro") Exit Sub Else Dim strArquivo As String = Convert.ToString(DateTime.Now.ToFileTime()) Dim fs As New FileStream(strArquivo, FileMode.CreateNew, FileAccess.Write) fs.Write(tempImagem, 0, tempImagem.Length) fs.Flush() fs.Close() picImagem.Image = Image.FromFile(strArquivo) End If End Using End Using Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub |
Utilizamos o controle InputBox para que o usuário informe o número do Id da imagem a ser recuperada através do comando SQL : "Select Imagem from Impressoes where ID=@ID" executando pela instrução ExecuteScalar.
Executando a aplicação, escolhendo , salvando e recuperando uma imagem teremos o resultado abaixo:
1- Escolhendo e salvando uma imagem
![]() |
2- recuperando uma imagem pelo seu Código
![]() |
![]() |
Pegue o projeto completo
aqui: ImagemBD.zip
Mat 7:19
Toda árvore que não produz bom fruto é cortada e lançada no fogo.Mat 7:20
Portanto, pelos seus frutos os conhecereis.Mat 7:21
Nem todo o que me diz: Senhor, Senhor! entrará no reino dos céus, mas aquele que faz a vontade de meu Pai, que está nos céus.
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: