Sie sind auf Seite 1von 9

13/11/12

VB .NET - Cadastro de Contatos com Foto

VB .NET - Cadastro de Contatos com Foto no SQL Server


A figura abaixo mostra a tela principal do aplicativo para Cadastro de contatos com foto no SQL Server 2008 feito na linguagem VB .NET.

Ele apresenta as funcionalidades bsicas de acesso, navegao e manuteno de dados usando um banco de dados SQL Server. O objetivo deste artigo mostrar como criar esse aplicativo usando o Visual Basic 2010 Express Edition e o SQL Server 2008 Express Edition. Existem muitas maneiras diferentes de criarmos uma aplicao como essa no Visual Basic .NET vou citar algumas delas: Usando Usando Usando Usando Usando DataSets NHibernate Entity Framework o LINQ to SQL ADO .NET

Nesta aplicao eu vou incluir o cdigo no formulrio por questo de simplicidade. No vou criar uma aplicao em camadas como sugere as boas prticas.

Em um outro artigo eu vou mostrar como ajustar esta aplicao para uma aplicao em camadas.

Criando o Banco de Dados e a Tabela


Eu vou utilizar a ltima por apresentar os conceitos bsicos das tarefas de acesso e manuteno de dados em um SGBD relacional como SQL Server. Vou comear criando o banco de dados Cadastro e a tabela Contatos que sero usados no projeto. Para realizar esta tarefa vou usar o SQL Server 2008 Management Studio (SSMS). Na figura abaixo temos o banco de dados Cadastro e a tabela Contatos. A estrutura da tabela contato indica que o campo id uma chave primria do tipo identity e que as imagens sero armazenadas no campo do tipo image;

www.macoratti.net/12/10/vbn_cad1.htm

1/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

Aps criar o banco de dados e a tabela vamos definir a string de conexo nas propriedades do projeto na guia Settings onde criamos a varivel CadastroConnectionString e definimos a string de conexo como sendo : Server=.\SQLExpress;;Initial Catalog=Cadastro;Integrated Security=SSPI

Criando o projeto Windows Forms


www.macoratti.net/12/10/vbn_cad1.htm 2/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

Abra o Visual Basic 2010 Express Edition e no menu File Clique em New Project selecionando o template Windows Forms Application com o nome CadastroVBNET; A seguir defina o leiaute do formulrio padro form1.vb conforme a imagem a seguir:

6 Labels - lblCodigo (as demais labels adotaro o nome padro) 6 TextBox - txtNome,TxtSobrenome,txtCidade,TxtEstado,txtNascimento e txtEmail 7 Buttons (Operaes0 - btnProcurarFoto,btnCadastrar,btnAlterar,btnDeletar,btnLocalizar, btnCarregaDados e btnSair 4 Buttons (Navegao) - btnPrimeiro,btnAnterior,btnProximo e btnUltimo 2 PictureBox - picImagem e picLogo 1 DataGridView - dgvAgenda 1 OpenFileDialog - ofdImagem

Definindo o cdigo do formulrio


Vamos agora definir o cdigo inserido no formulrio form1.vb onde iremos definir procedimentos e funes bem como incluir cdigo em eventos dos controles de formulrio. 1 - declarando os namespaces usados Imports System.Data Imports System.Data.SqlClient Imports System.IO 2- definindo as variveis globais do formulrio
www.macoratti.net/12/10/vbn_cad1.htm 3/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

Dim Str As String = My.Settings.CadastroConnectionString.ToString Dim sqlDa As New SqlDataAdapter Dim dtb As DataTable Dim sqlCon As New SqlConnection(Str) Dim sqlCmd As New SqlCommand 3- Cdigo do evento Load do formulrio form1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ofdImagem.Filter = "Todos(*.Jpg, *.Jpeg, *.Bmp)|*.Jpg; *.Jpeg; *.Bmp" CarregarDados() CarregarImagem() 'ativa o modo de seleo de linha dgvAgenda.SelectionMode = DataGridViewSelectionMode.FullRowSelect 'ajusta o tamanho das clulas Me.dgvAgenda.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'esconde a coluna da imagem Me.dgvAgenda.Columns(1).Visible = False End Sub Este cdigo carrega os dados e a imagem e exibe no controle Datagridview. 4- Cdigo do procedimento CarregaDados() que seleciona os dados da tabela Contatos e exibe no DataGridView: Private Sub CarregarDados() Try With sqlCmd .CommandType = CommandType.Text .CommandText = "SELECT * from Contatos" .Connection = sqlCon End With With sqlDa .SelectCommand = sqlCmd dtb = New DataTable .Fill(dtb) dgvAgenda.DataSource = dtb End With Catch ex As Exception MsgBox(ex.Message) Finally sqlCon.Close() End Try End Sub Seleciona todos os dados da tabela Contatos e exibe no datagridview. 5- Cdigo do procedimento CarregarImagem() que atualiza as caixas de texto do formulrio com os dados selecionados no DataGridView e obtm a imagem: Private Sub CarregarImagem() Try Me.lblCodigo.Text = Me.dgvAgenda.CurrentRow.Cells("id").Value Me.txtNome.Text = Me.dgvAgenda.CurrentRow.Cells("nome").Value Me.txtSobrenome.Text = Me.dgvAgenda.CurrentRow.Cells("sobreNome").Value Me.txtCidade.Text = Me.dgvAgenda.CurrentRow.Cells("cidade").Value Me.txtEstado.Text = Me.dgvAgenda.CurrentRow.Cells("estado").Value Me.txtNascimento.Text = Me.dgvAgenda.CurrentRow.Cells("nascimento").Value Me.txtEmail.Text = Me.dgvAgenda.CurrentRow.Cells("email").Value Dim ms As New MemoryStream(ObtemImagem(CInt(dgvAgenda.SelectedCells(0).Value))) picImagem.Image = Image.FromStream(ms) Catch ex As Exception MsgBox("Erro : " & ex.Message) End Try End Sub 6 - Cdigo da funo ObtemImagem() que retorna um array de bytes contendo a imagem: Function ObtemImagem(ByVal Img As Integer) As Byte() Dim Imagem() As Byte = Nothing
www.macoratti.net/12/10/vbn_cad1.htm 4/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

With sqlCmd .CommandType = CommandType.Text .CommandText = "Select imagem From Contatos Where id = " & Img .Connection = sqlCon End With Try sqlCon.Open() Imagem = CType(sqlCmd.ExecuteScalar(), Byte()) Catch ex As Exception MsgBox("Erro : " + ex.Message) Finally sqlCon.Close() End Try Return Imagem End Function 7- Cdigo do evento Click do boto de comando Alterar Imagem que abre a caixa de dilogo OpenFileDialog e atualiza o controle PicImage com a imagem selecionada: Private Sub btnProcurarFoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurarFoto.Click If ofdImagem.ShowDialog = DialogResult.OK Then picImagem.Image = System.Drawing.Image.FromFile(ofdImagem.FileName) End If End Sub 8 - Cdigo do evento Click do boto de comando Novo que limpa as caixas de texto, faz a validao e chama a rotina InserirDados() para atualizar a tabela Contatos com um novo registro: Private Sub btnCadastrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCadastrar.Click If btnCadastrar.Text = "Novo" Then limpaCampos() txtNome.Focus() btnCadastrar.Text = "Cadastrar" Else If btnCadastrar.Text = "Cadastrar" Then If ValidaDados() Then InserirDados() btnCadastrar.Text = "Novo" Else MsgBox("Informe o nome , sobrenome , estado , cidade e selecione Imagem para cadastramento...") End If End If End If End Sub 9 - Cdigo da rotina InserirDados() que inclui um novo registro na tabela Contatos: Private Sub InserirDados() Try sqlCon.Open() Dim arrFilename() As String = Split(Text, "\") Array.Reverse(arrFilename) Dim ms As New MemoryStream picImagem.Image.Save(ms, picImagem.Image.RawFormat) Dim arrImage() As Byte = ms.GetBuffer With sqlCmd .CommandType = CommandType.Text .CommandText = "" .CommandText = "INSERT INTO Contatos (imagem, nome, sobrenome, cidade, estado, nascimento, email ) _ VALUES (@Imagem,@nome,@sobrenome,@cidade,@estado,@nascimento,@email)" _ & "SELECT * FROM Contatos WHERE (Id = SCOPE_IDENTITY())" .Connection = sqlCon .Parameters.Add(New .Parameters.Add(New .Parameters.Add(New .Parameters.Add(New
www.macoratti.net/12/10/vbn_cad1.htm

SqlParameter("@Imagem", SqlDbType.Image)).Value = arrImage SqlParameter("@nome", SqlDbType.NVarChar)).Value = txtNome.Text SqlParameter("@sobrenome", SqlDbType.NVarChar)).Value = txtSobrenome.Text SqlParameter("@cidade", SqlDbType.NVarChar)).Value = txtCidade.Text
5/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

.Parameters.Add(New SqlParameter("@estado", SqlDbType.NVarChar)).Value = txtEstado.Text .Parameters.Add(New SqlParameter("@nascimento", SqlDbType.NVarChar)).Value = txtNascimento.Text .Parameters.Add(New SqlParameter("@email", SqlDbType.NVarChar)).Value = txtEmail.Text End With sqlCmd.ExecuteNonQuery() CarregarDados() MsgBox("Registro Inserido com Sucesso.", MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.Message) Finally sqlCmd.Parameters.Clear() sqlCon.Close() End Try End Sub 10 - Cdigo do evento Click do boto de comando Alterar que faz a validao e chama a rotina AlterarDados(): Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click If ValidaDados() Then AlterarDados() Else MsgBox("Informe o nome , sobrenome , estado e cidade e selecione imagem para alterao de dados...") End If End Sub 11 - Cdigo da rotina AlterarDados() que altera os dados de um registro na tabela Contatos: Private Sub AlterarDados() Try sqlCon.Open() Dim arrFilename() As String = Split(Text, "\") Array.Reverse(arrFilename) Dim ms As New MemoryStream picImagem.Image.Save(ms, picImagem.Image.RawFormat) Dim arrImage() As Byte = ms.GetBuffer With sqlCmd .CommandType = CommandType.Text .CommandText = "" .CommandText = "UPDATE [Contatos] SET [imagem] = @Imagem, [nome] = '" & txtNome.Text & "', [sobrenome] = '" _ & txtSobrenome.Text & "' , [email] = '" & txtEmail.Text & "', [cidade] = '" & txtCidade.Text & "' , [estado] = '" _ & txtEstado.Text & "' WHERE ([Id] = " & Me.lblCodigo.Text & ");" & _ "SELECT * FROM Contatos WHERE (Id = " & Me.lblCodigo.Text & ")" .Connection = sqlCon .Parameters.Add(New SqlParameter("@Imagem", SqlDbType.Image)).Value = arrImage End With sqlCmd.ExecuteNonQuery() CarregarDados() MsgBox("Registro Alterado com Sucesso.", MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.Message) Finally sqlCmd.Parameters.Clear() sqlCon.Close() End Try End Sub 12 - Cdigo do evento Click do boto de comando Deletar que chama a rotina ExcluirDados(): Private Sub btnDeletar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeletar.Click If MessageBox.Show("Confirma a Excluso do registro : " & lblCodigo.Text & " ? ", "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = v ExcluirDados() End If End Sub 13- Cdigo da rotina ExcluirDados() que remove um registro da tabela Contatos:

www.macoratti.net/12/10/vbn_cad1.htm

6/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

Private Sub ExcluirDados() Try sqlCon.Open() With sqlCmd .CommandText = "Delete from Contatos where id = " & Me.lblCodigo.Text .Connection = sqlCon End With sqlCmd.ExecuteNonQuery() CarregarDados() MsgBox("Registro deletado com Sucesso.", MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.Message) Finally sqlCmd.Parameters.Clear() sqlCon.Close() End Try End Sub 14 - Cdigo do evento Click do boto de comando Localizar que chama a rotina LocalizarDados(): Private Sub btnLocalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLocalizar.Click LocalizarDados() End Sub 15 - Cdigo da rotina LocalizarDados(): Private Sub LocalizarDados() Dim msg, titulo, valor, nome As String msg = "Informe o nome a procurar." titulo = "Procurar Registro" ' define o titulo. valor = "A" ' define o valor padrao ' Exibe mensagem posicionada nome = InputBox(msg, titulo, valor, 800, 400) If nome <> String.Empty Then Try Dim sqlCmdSqlBuscaRegistro As String = "SELECT * from Contatos where nome like '%" & nome & "%'" With sqlCmd .CommandType = CommandType.Text .CommandText = sqlCmdSqlBuscaRegistro .Connection = sqlCon End With With sqlDa .SelectCommand = sqlCmd dtb = New DataTable .Fill(dtb) dgvAgenda.DataSource = dtb End With Catch ex As Exception MsgBox("No foram encontrados registros com este parmetro.") End Try End If End Sub 16 - Cdigo do evento Click do boto de comando Carregar Dados que chama a rotina CarregarDados(): Private Sub btnCarregaDados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregaDados.Click CarregarDados() End Sub 17 - Cdigo da rotina ValidaDados Private Function ValidaDados() As Boolean If txtNome.Text <> String.Empty And txtSobrenome.Text <> String.Empty And txtEstado.Text <> String.Empty And txtCidade.Text <> _
www.macoratti.net/12/10/vbn_cad1.htm 7/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

String.Empty And picImagem.Image IsNot Nothing Then Return True Else Return False End If End Function 18 - Cdigo da rotina LimpaCampos() Private Sub limpaCampos() txtNome.Text = "" txtSobrenome.Text = "" txtCidade.Text = "" txtEstado.Text = "" txtEmail.Text = "" txtNascimento.Text = "" picImagem.Image = Nothing End Sub 19 - Cdigo dos eventos Click dos botes de navegao: Private Sub btnPrimeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrimeiro.Click ' Vai para o primeiro registro... Me.BindingContext(dtb).Position = 0 CarregarImagem() End Sub Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnterior.Click ' Volta um registro... Me.BindingContext(dtb).Position -= 1 CarregarImagem() End Sub Private Sub btnProximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProximo.Click ' Avana um registro... Me.BindingContext(dtb).Position += 1 CarregarImagem() End Sub Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUltimo.Click ' Vai para o ltimo registro... Me.BindingContext(dtb).Position = dtb.Rows.Count CarregarImagem() End Sub 20- Cdigo do evento Click do boto de comando Sair: Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click If MessageBox.Show("Confirma o encerramento do sistema ? ", "Encerrar", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = vbYes Then ExcluirDados() End If End Sub 21- Cdigo do eventos CellEndEdit e Click do controle DataGridView: Private Sub dgvAgenda_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAgenda.Ce Me.txtNome.Text = Me.dgvAgenda.CurrentCell.Value AlterarDados() CarregarImagem() End Sub Private Sub dgvAgenda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgvAgenda.Click CarregarImagem() End Sub Pegue o projeto completo aqui: CadastroVBNET.zip

Rom 8:5 Pois os que so segundo a carne inclinam-se para as coisas da carne; mas os que so segundo o Esprito para as coisas do Esprito. Rom 8:6 Porque a inclinao da carne morte; mas a inclinao do Esprito vida e paz.
Referncias:
www.macoratti.net/12/10/vbn_cad1.htm 8/9

13/11/12

VB .NET - Cadastro de Contatos com Foto

Seo VB .NET do Site Macoratti.net Super DVD .NET - A sua porta de entrada na plataforma .NET Super DVD Vdeo Aulas - Vdeo Aula sobre VB .NET, ASP .NET e C# Trabalhando com imagens no SQL Server - Macoratti.net Usando o SQL Server Management Studio - Macoratti.net VB.NET - Criando uma aplicao em 3 camadas (MVC) - Macoratti.net VB .NET - Criando uma aplicao em camadas - Macoratti.net ADO.NET - Criando uma Cadastro de Clientes - Macoratti.net VB.NET - Aplicaes completas para voc aprender ... - Macoratti.net
Jos Carlos Macoratti

www.macoratti.net/12/10/vbn_cad1.htm

9/9

Das könnte Ihnen auch gefallen