VB
.NET - Salvando e Recuperando imagens do Microsoft Access
Este é mais um artigo sobre como salvar e recuperar imagens em um banco de dados. Dessa vez vamos salvar e recuperar imagens em um banco de dados Microsoft Access.
Vou criar um projeto bem simples apenas mostrando como alcançar este objetivo.
Fica a seu cargo aplicar as boas práticas ao projeto criando uma camada de acesso a dados e remover o código da camada de apresentação.
Vou usar o Visual Basic 2010 Express Edition para criar o projeto usando a linguagem VB .NET.
Para armazenar as imagens vamos criar um banco de dados chamado Imagens.mdb e um tabela Images com dois campos: ImageID e Image
A estrutura da tabela pode ser vista a seguir:
![]() |
Criando o projeto
No menu File clique em New Project e informe o nome SalvarImagensAccess:
No formulário form1.vb inclua os controles :
Conforme o leiaute da figura abaixo:
![]() |
Vamos agora ao código do projeto:
Defina os seguintes namespaces:
Imports
System.Data.OleDb
Imports System.IO
Em seguida no início do formulário vamos definir a string de conexão e as variáveis objetos para acessar e tratar os dados:
Dim cnString As
String = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security
Info=False;Data Source=c:\dados\Imagens.mdb"
Dim imgNome As String
Dim daImagem As OleDbDataAdapter
Dim dsImagem As DataSet
No evento Load do formulário vamos chamar a rotina para preencher a combobox com as informações das imagens já salvas no banco de dados exibindo o seu código:
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
preencheCombo()
End Sub
|
A rotina preencheCombo() é mostrada a seguir:
Private Sub preencheCombo()
Try
Dim CN As New OleDbConnection(cnString)
CN.Open()
daImagem = New OleDbDataAdapter()
daImagem.SelectCommand = New OleDbCommand("SELECT * FROM images", CN)
dsImagem = New DataSet("dsImagem")
daImagem.Fill(dsImagem)
Dim dtable As DataTable
dtable = dsImagem.Tables(0)
cboImagemID.Items.Clear()
For Each drow As DataRow In dtable.Rows
cboImagemID.Items.Add(drow(0).ToString())
cboImagemID.SelectedIndex = 0
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
No evento Click do botão - Carregar Imagem de um Arquivo - temos o código a seguir que abre uma caixa de diálogo para que seja selecionado um arquivo de imagem:
Private Sub btnCarregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregar.Click
Try
Dim dlgImage As FileDialog = New OpenFileDialog()
dlgImage.Filter = "Image File (*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif"
If dlgImage.ShowDialog() = DialogResult.OK Then
imgNome = dlgImage.FileName
Dim newimg As New Bitmap(imgNome)
imgSalvar.SizeMode = PictureBoxSizeMode.StretchImage
imgSalvar.Image = DirectCast(newimg, Image)
End If
dlgImage = Nothing
Catch ae As System.ArgumentException
imgNome = " "
MessageBox.Show(ae.Message.ToString())
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
End Sub
|
No evento Click do botão - Salvar imagem no banco de dados - salva a imagem no banco de dados:
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
Try
If imgNome <> "" Then
Dim fs As FileStream
fs = New FileStream(imgNome, FileMode.Open, FileAccess.Read)
Dim picByte As Byte() = New Byte(fs.Length - 1) {}
fs.Read(picByte, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
Dim CN As New OleDbConnection(cnString)
CN.Open()
Dim strSQL As String
strSQL = "INSERT INTO Images([Image]) values (" & " @Img)"
Dim imgParam As New OleDbParameter()
imgParam.OleDbType = OleDbType.Binary
imgParam.ParameterName = "Img"
imgParam.Value = picByte
Dim cmd As New OleDbCommand(strSQL, CN)
cmd.Parameters.Add(imgParam)
cmd.ExecuteNonQuery()
MessageBox.Show("Imagem salva com sucesso.")
cmd.Dispose()
CN.Close()
CN.Dispose()
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
preencheCombo()
End Sub
|
Abaixo temos o código do evento Click do botão - Carregar imagem do banco de dados - que recupera uma imagem salva no banco de dados a partir do seu Id;
Private Sub btnRecuperarImgBD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecuperarImgBD.Click
Dim dataTable As DataTable = dsImagem.Tables(0)
If imgRecuperar.Image IsNot Nothing Then
imgRecuperar.Image.Dispose()
End If
Dim fsImage As New FileStream("image.jpg", FileMode.Create)
For Each dataRow As DataRow In dataTable.Rows
If dataRow(0).ToString() = cboImagemID.SelectedItem.ToString() Then
Dim blob As Byte() = DirectCast(dataRow(1), Byte())
fsImage.Write(blob, 0, blob.Length)
fsImage.Close()
fsImage = Nothing
imgRecuperar.Image = Image.FromFile("image.jpg")
imgRecuperar.SizeMode = PictureBoxSizeMode.StretchImage
imgRecuperar.Refresh()
End If
Next
End Sub
|
Executando o projeto podemos escolher uma imagem e salvá-la ou recuperar uma imagem já salva conforme mostra a figura a seguir:
![]() |
Pegue o projeto completo
para estudo aqui:
SalvarImagensAccess.zip
Eu sei é apenas VB .NET , mas eu gosto...
"E Jesus lhes disse: Eu sou o pão da vida: aquele que vem a mim não terá fome; e quem crê em mim nunca terá sede." (João 6:35)
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#