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: