Salvando imagens em um banco de dados

 

Já mostramos como salvar figura em uma base de dados no VB5 e VB6 . Lembra ??? Se não lembra dê uma olhada no artigo : Imagens e Banco de dados. E se você precisar gravar imagens em um banco de dados usando o VB.NET ??? Tamos aqui para mostrar exatamente isto.

 

Como exemplo vou criar um banco de dados Cadastro.mdb no diretório c:\teste e a tabela Imagem com a seguinte estrutura:

 

 

O objetivo é gravar imagens no campo Imagem do tipo OLE e o tamanho da imagem no campo Tamanho do tipo Texto. Então vamos lá...

1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : SalvaImagemBD
  4. Location : c:\vbnet\SalvaImagemBD

2- No formulário padrão - form1.vb - insira os controles : label , TextBox , Button conforme figura abaixo:

 

 

Obs: Insira também o componente - OpenFileDialog - no projeto. Ele será usado para abrir janela - Abrir Arquivo.

 

3-  Como vamos usar os namespaces System.IO (para tratamento de arquivos) e System.Data.OleDb (para acesso a base de dados) temos que importar estes namespaces no formulário:

 

Imports System.IO

Imports System.Data.OleDb

 

4- A seguir vamos declarar as variáveis string sql  e strcon também no formulário:

 

Dim strcon As String

Dim sql As String

 

5- No evento click do botão de comando insira o código abaixo :

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim arqImg As FileStream

Dim rImg As StreamReader

If Len(txtimg.Text) <> 0 Then

   arqImg = New FileStream(txtimg.Text, FileMode.Open, FileAccess.Read, FileShare.Read)

   rImg = New StreamReader(arqImg)

Else

   MsgBox("Informe um nome para a imagem que deseja incluir na tabela.", MsgBoxStyle.Critical, "Erro")

    Exit Sub

End If

strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Cadastro.mdb"

sql = "INSERT INTO Imagens(Imagem,Tamanho) VALUES (?,?)"

Dim conexao As New OleDbConnection(strcon)

Dim comando As New OleDbCommand(sql, conexao)

Try

  'declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva

  Dim arqByteArray(arqImg.Length - 1) As Byte

  arqImg.Read(arqByteArray, 0, arqImg.Length)

  'inclui os parâmetros

   comando.Parameters.Add("@Imagem", OleDbType.Binary, arqImg.Length).Value = arqByteArray

   comando.Parameters.Add("@Tamanho", OleDbType.VarChar, 255).Value = arqImg.Length

  'abre a conexao , executa o comando e fecha a conexao

  conexao.Open()

  comando.ExecuteNonQuery()

  conexao.Close()

  MsgBox("Imagem incluida com sucesso !", MsgBoxStyle.Information, "OK")

Catch ex As Exception

  MsgBox(ex.ToString, MsgBoxStyle.Critical, "Erro")

End Try

End Sub

 

O código acima abre uma conexão OLEDB com a base de dados cadastro e cria um comando para inserir a figura informada na tabela Imagem. Como uma imagem é um arquivo do tipo binário definimos o tipo binário na passagem de parâmetros para o comando SQL. Usamos a declaração SQL - INSERT INTO para incluir a imagem no banco de dados.

 

 

6- Para encerrar inclua o código que abre a janela de diálogo- Abrir Arquivo

 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

  OpenFileDialog1.ShowDialog()

  txtimg.Text = OpenFileDialog1.FileName

End Sub

 

Como neste artigo não vou exibir a imagem gravada , se você duvidar , abra o banco de dados e a tabela e veja que a  imagem realmente foi gravada:

 

 

Até a próxima...


José Carlos Macoratti