WPF - Salvando e Recuperando imagens em um Banco de dados - II
Neste artigo eu vou mostrar como podemos armazenar e recuperar imagens em um banco de dados SQL Server em uma aplicação WPF usando a linguagem VB .NET. |
Na primeira parte do artigo definimos o modelo de dados, criamos a solução WPF e o menu da aplicação. Neste artigo eu vou definir a janela SalvarImagem.xaml onde irei implementar as funcionalidades para salvar imagens no banco de dados.
Recursos usados:
SQL Server Express 2012
Implementando as funcionalidades para salvar imagens
Abra o projeto criado na primeira parte do artigo e a seguir abra o arquivo SalvarImagem.xaml e inclua os seguintes controles a partir da ToolBox:
Defina os controles conforme o leiaute da figura abaixo
O código XAML gerado é visto abaixo:
<Window x:Class="SalvarImagem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Salvar Imagens" Height="500" Width="600" WindowStartupLocation="CenterScreen">
<Grid Background="Aqua">
<TextBox x:Name="txtArquivo" HorizontalAlignment="Left" Height="23" Margin="51,374,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="432"/>
<Button x:Name="btnProcurar" Content="Procurar" HorizontalAlignment="Left" Margin="488,374,0,0" VerticalAlignment="Top" Width="75" Background="#FF9A9AC1" Click="btnProcurar_Click"/>
<Button x:Name="btnSalvar" Content="Salvar a imagem no Banco de dados" HorizontalAlignment="Left" Margin="51,402,0,0" VerticalAlignment="Top" Width="432" Background="#FF9898CF" Click="btnSalvar_Click"/>
<Button x:Name="btnSair" Content="Sair" HorizontalAlignment="Left" Margin="488,402,0,0" VerticalAlignment="Top" Width="75" Background="#FFAEAED6" Click="btnSair_Click"/>
<Image x:Name="imgArquivo" HorizontalAlignment="Left" Height="309" Margin="51,29,0,0" VerticalAlignment="Top" Width="432" ToolTip="Selecione a imagem para Salvar" />
<Label x:Name="lblmsg" Content="" HorizontalAlignment="Left" Margin="51,429,0,0" VerticalAlignment="Top" Width="432" Height="30"/>
</Grid>
</Window>
|
Observe que a janela SalvarImagem será exibida centralizada : WindowStartupLocation="CenterScreen" e que definimos os eventos Click para cada controle Button.
Vamos declarar os seguintes namespaces que iremos usar nesta janela:
Imports
Microsoft.Win32Imports
System.IOImports
System.Data.SqlClientImports
System.DataAgora vamos definir o código em cada um dos eventos Click.
1- Código do evento Click do botão Procurar -
Private Sub btnProcurar_Click(sender As Object, e As RoutedEventArgs)
lblmsg.Content = ""
imgArquivo.Source = Nothing
Dim FileDialog As New OpenFileDialog
Try
FileDialog.Title = "Selecione um Arquivo"
FileDialog.InitialDirectory = ""
FileDialog.Filter = "Image Files (*.gif,*.jpg,*.jpeg,*.bmp,*.png)|*.gif;*.jpg;*.jpeg;*.bmp;*.png"
FileDialog.FilterIndex = 1
FileDialog.ShowDialog()
txtArquivo.Text = FileDialog.FileName()
lblmsg.Content = NomeArquivo(txtArquivo.Text.Trim)
Dim bmp As New BitmapImage(New Uri(txtArquivo.Text.Trim))
If bmp.Width < 484 And bmp.Height < 268 Then
imgArquivo.Stretch = Stretch.None
imgArquivo.VerticalAlignment = Windows.VerticalAlignment.Center
imgArquivo.HorizontalAlignment = Windows.HorizontalAlignment.Center
imgArquivo.Source = bmp
Else
imgArquivo.Stretch = Stretch.Uniform
imgArquivo.VerticalAlignment = Windows.VerticalAlignment.Center
imgArquivo.HorizontalAlignment = Windows.HorizontalAlignment.Center
imgArquivo.Source = bmp
End If
Catch ex As Exception
lblmsg.Content = "Você não selecionou nenhum arquivo Imagem..."
End Try
End Sub
|
Este código abra uma caixa de diálogo que permite selecionar uma imagem exibindo-a a seguir no controle PictureBox - imgArquivo - do formulário:
O código utiliza o método NomeArquivo() cujo objetivo é apenas extrair o home do arquivo do caminho completo de sua localização:
Private Function NomeArquivo(ByVal Pth As String) As String
Dim posicaoBarra As Integer = Pth.LastIndexOf("\")
Dim _nomeArquivo As String = Pth.Substring(posicaoBarra + 1)
Return _nomeArquivo
End Function
|
Após selecionar a imagem o usuário clica no botão - Salvar a imagem no banco de dados - para armazenar a imagem na tabela Imagens:
Private Sub btnSalvar_Click(sender As Object, e As RoutedEventArgs)
Try
lblmsg.Content = ""
Dim Stream As FileStream
Dim Reader As StreamReader
Stream = New FileStream(txtArquivo.Text, FileMode.Open, FileAccess.Read)
Reader = New StreamReader(Stream)
Dim ImgData(Stream.Length - 1) As Byte
Stream.Read(ImgData, 0, Stream.Length - 1)
Dim str As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Cadastro;Integrated Security=True"
Dim con As New SqlConnection(str)
Dim sql As String = "INSERT INTO Imagens (imagemNome, Imagem) VALUES(@ImagemNome, @Imagem)"
Dim cmd As New SqlCommand(sql, con)
cmd.Parameters.Add("@ImagemNome", SqlDbType.Text).Value = NomeArquivo(txtArquivo.Text.Trim)
cmd.Parameters.Add("@Imagem", SqlDbType.Binary, Stream.Length).Value = ImgData
con.Open()
cmd.ExecuteNonQuery()
lblmsg.Content = " O arquivo " & NomeArquivo(txtArquivo.Text.Trim) & " foi armazenado com sucesso...."
con.Close()
Catch ex As Exception
lblmsg.Content = ex.Message
End Try
End Sub
|
O código acima abre o arquivo criando um stream e a seguir um array de bytes.
A seguir , usando ADO .NET, definimos a string de conexão com o banco de dados e a instrução SQL INSERT INTO para incluir os dados na tabela.
Atribuímos os parâmetros para o objeto parameters, e usamos o método ExecuteNonQuery() para executar a instrução SQL.
Na conclusão do artigo irei definir o código da janela RecuperarImagem.
Já estou crucificado com Cristo; e vivo, não mais eu, mas Cristo vive em mim; e
a vida que agora vivo na carne, vivo-a pela fé do Filho de Deus, o qual me amou,
e se entregou a si mesmo por mim.(apóstolo
Paulo)
Gálatas 2:20
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET