CRUD Básico em VB.NET

Veja neste artigo como criar um CRUD básico em Windows Forms, utilizando a linguagem VB.NET e ADO.NET com banco de dados ao SQL Server.

Olá pessoal, neste artigo veremos como fazer um CRUD básico em Windows Forms usando a linguagem VB.NET e o banco de dados SQL Server.

Introdução

Este artigo é feito já considerando que o leitor esteja habituado com o básico dos conceitos do ADO.NET. Se você não se enquadra neste perfil, pesquise no próprio blog, que tem diversos artigos publicados sobre o assunto.

Conheça nosso Curso de ADO.NET Completo.

Antes de qualquer coisa vamos criar a tabela Clientes no SQL Server, veja a estrutura da tabela abaixo, na Figura 1:


Figura 1: Tabela Clientes

Segue abaixo o script para criação da tabela:

CREATE TABLE Clientes ( IdCliente INT IDENTITY(1,1) NOT NULL , Nome VARCHAR(40) NOT NULL , Endereco VARCHAR(40) NOT NULL , Cidade VARCHAR(20) NOT NULL , Telefone VARCHAR(15) NULL , Email VARCHAR(20) NULL , Ativo BIT NOT NULL , CONSTRAINT PK_IdCliente PRIMARY KEY (IdCliente) )

Tabela criada, crie um projeto em Windows Form (lembrando que usaremos a linguagem VB.NET para este artigo) e adicione a ele uma classe, dando a ela o nome de DadosClientes, essa classe irá conter toda a lógica do projeto.

Sem mais delongas, comece importando nesta classe o namespace System.Data.SqlClient:

Imports System.Data.SqlClient

Agora dentro de nossa classe iremos criar outra classe, responsável por conter as variáveis que representarão as colunas de nosso banco de dados (se o projeto fosse em camadas poderíamos dizer que esta classe seria a camada de Modelo dos dados). Veja a classe:

Public Class ClientesObj Public IdCliente As Integer = 0 Public Nome As String = String.Empty Public Endereco As String = String.Empty Public Cidade As String = String.Empty Public Telefone As String = String.Empty Public Email As String = String.Empty Public Ativo As Boolean = False End Class

Assim, ao chamar os métodos não preciso ficar passando diversos parâmetros, apenas passo esta classe.

Dando continuidade crie algumas variáveis globais, que iremos usar nos métodos:

'Variável com a string de conexão ao banco Public Const strConexao As String = "Data Source=WELLINGTON-PC\SQLEXPRESS;Initial Catalog=Artigos;Integrated Security=True" 'Variável que receberá a Instrução SQL, que será passada de acordo com o método usado Public strInstrucao As String = String.Empty 'Objeto instanciado da classe SqlConnection, com a string de conexão como parâmetro Public objConexao As New SqlConnection(strConexao) 'Objeto instanciado da classe SqlCommand, com a instrução SQL e o objeto de conexão como parâmetro Public objCommand As New SqlCommand(strInstrucao, objConexao)

Note que, fazendo desta forma, não precisamos declará-las em cada método que precisarmos usá-las. As variáveis são referentes aos objetos das classes do ADO.NET, a string de conexão com o banco, além de uma variável que irá receber a instrução SQL (dependendo do método), todas essenciais para nosso projeto.

Vamos agora criar os principais métodos em nossa classe, para que em seguida adicionemos os detalhes finais referentes aos formulários do projeto.

Comece criando o método que irá gravar o cliente na base de dados:

Public Sub GravarCliente(ByVal clientes As ClientesObj) strInstrucao = "INSERT INTO Clientes VALUES (@Nome, @Endereco, @Cidade, @Telefone, @Email, @Ativo)" objCommand.CommandText = strInstrucao objCommand.Connection = objConexao objCommand.Parameters.AddWithValue("@Nome", clientes.Nome) objCommand.Parameters.AddWithValue("@Endereco", clientes.Endereco) objCommand.Parameters.AddWithValue("@Cidade", clientes.Cidade) objCommand.Parameters.AddWithValue("@Telefone", clientes.Telefone) objCommand.Parameters.AddWithValue("@Email", clientes.Email) objCommand.Parameters.AddWithValue("@Ativo", clientes.Ativo) objConexao.Open() objCommand.ExecuteNonQuery() objConexao.Close() End Sub

O método para atualizar o cliente será praticamente o mesmo, apenas com a adição do IdCliente, que será nosso parâmetro para o Where de nosso Update (lembrando que nunca deveremos criar um UPDATE ou DELETE sem WHERE).

Dito isto, não irei exibir aqui o método para atualizar o cliente, já que o projeto completo encontra-se disponível para download no topo da página.

Veja abaixo o método para excluir o cliente da base de dados:

Public Sub ExcluirCliente(ByVal IdCliente As Integer) strInstrucao = "DELETE FROM Clientes WHERE IdCliente = @IdCliente" objCommand.CommandText = strInstrucao objCommand.Connection = objConexao objCommand.Parameters.AddWithValue("@IdCliente", IdCliente) objConexao.Open() objCommand.ExecuteNonQuery() objConexao.Close() End Sub

Bem simples, não é mesmo? Seguindo a mesma lógica dos outros. Finalizando, veja o método para consultar os clientes, um pouco diferentes dos outros:

Public Function ConsultarClientes() As DataTable Dim dt As New DataTable Dim ds As New DataSet() strInstrucao = "SELECT IdCliente, Nome, Endereco, Telefone, Ativo FROM Clientes" objCommand.CommandText = strInstrucao objCommand.Connection = objConexao objConexao.Open() Dim da As New SqlDataAdapter(objCommand) da.Fill(ds) dt = ds.Tables(0) objConexao.Close() Return dt End Function

Note que aqui usei DataTable, DataSet e DataAdapter, componentes muito importantes do ADO.NET.

Crie um formulário e dê a ele o nome de Cadastro. Nele, adicione alguns controles para que o mesmo fique como a Figura 2 nos mostra:


Figura 2: Formulário de Cadastro

Bem simples. Esse botão Ver nos levará para a tela de Consulta, que criaremos logo abaixo.

Apenas altere a propriedade Modifiers dos TextBoxes e dos RadioButtons para Public. Você entenderá o porque disso mais à frente.

No form de Consulta, adicione um ListView e três Buttons. No ListView configure as propriedades GridLines para True, FullRowSelect para True, MultiSelect para False e View para Details. Adicione também nele 5 colunas. Veja como o formulário ficará na Figura 2:


Figura 3: Formulário de Consulta

Finalizando, vá à página de códigos do form de Cadastro e declare uma variável global (que será “enxergada” em todo o form) do tipo Integer:

Public IdCliente As Integer = 0

Ela irá receber o Id do Cliente do form de Consulta, para assim definirmos quando for Alteração ou Gravação de dados.

Agora vamos criar a codificação para os formulários do projeto e testarmos o funcionamento dos métodos de nossa classe.

Veja abaixo a codificação do método que será chamado no botão Gravar do form Cadastro (não trabalharemos com validações neste artigo, já que o intuito do artigo não é este, apesar delas terem sido feitas no projeto):

Private Sub Gravar() Dim classe As New DadosClientes Dim objeto As New DadosClientes.ClientesObj objeto.Nome = txtNome.Text.Trim() objeto.Endereco = txtEndereco.Text.Trim() objeto.Cidade = txtCidade.Text.Trim() objeto.Telefone = mtbTelefone.Text.Trim() objeto.Email = txtEmail.Text.Trim() If rbtAtivo.Checked Then objeto.Ativo = True Else objeto.Ativo = False End If If (IdCliente > 0) Then objeto.IdCliente = IdCliente classe.AtualizarCliente(objeto) Else classe.GravarCliente(objeto) End If End Sub

Note que usando a classe tudo fica mais fácil e nosso código não fica muito “poluído”. O que fiz acima foi instanciar a classe em uma variável e instanciar a classe criada dentro de nossa classe principal em outra variável. Depois atribuí a cada objeto de minha classe ClientesObj o valor nos campos, seguido do método Trim(), que remove os espaços em branco. Ao final verifico o valor da variável IdCliente. Se for maior que 0 chamo o método AtualizarCliente, passando o Id pro objeto. Senão chamo o GravarCliente passando o objeto carregado com os valores respectivos.

Agora vá ao form de Consulta e declare uma variável pública que irá receber o índice da linha do ListView:

Dim index As Integer

Para que façamos isso devemos usar o evento Click do ListView. Chame-o e faça a seguinte codificação:

Private Sub lsvDados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lsvDados.Click If lsvDados.SelectedItems.Count > 0 Then index = lsvDados.SelectedItems(0).Index End If End Sub

Agora veja o método que irá popular nosso ListView com os dados do banco:

Private Sub CarregarListView() Dim objDados As New DadosClientes() Dim dt As New DataTable dt = objDados.ConsultarClientes() For Each linha As DataRow In dt.Rows Dim lista As New ListViewItem lista.Text = linha("IdCliente").ToString() lista.SubItems.Add(linha("Nome").ToString()) lista.SubItems.Add(linha("Endereco").ToString()) lista.SubItems.Add(linha("Telefone").ToString()) If linha("Ativo").ToString().Equals("True") Then lista.SubItems.Add("Sim") Else lista.SubItems.Add("Não") End If lsvDados.Items.Add(lista) Next End Sub

Apenas instanciei um DataTable, que recebeu meu método que é do mesmo tipo, fiz um laço foreach, para pesquisar em cada linha do DataTable, dentro dele instanciei um ListViewItem e fui adicionando nele os valores do DataRow. Ao final jogo em meu ListView os itens adicionados a variável do ListViewItem.

Você pode chamar este método no evento Load do formulário, só dar dois cliques no form para que o evento seja chamado.

Crie o método Excluir, você precisará de apenas 2 linhas de código:

Private Sub ExcluirRegistro(ByVal IdCliente As Integer) Dim objDados As New DadosClientes() objDados.ExcluirCliente(IdCliente) End Sub

Como o método é do tipo Integer, você deve chama-lo passando o Id do Cliente que você deseja excluir. Para isso codifique o evento click do botão Excluir:

Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click If lsvDados.SelectedItems.Count > 0 Then ExcluirRegistro(Integer.Parse(lsvDados.Items(index).Text)) End If End Sub

Note que eu passo o valor da variável index, que é a coluna IdCliente.

Finalizando, vamos ao método Alterar. Para ficar tudo mais fácil, se o usuário clicar em Alterar ele volta pra tela de Cadastro com os dados preenchidos e clica em Gravar. Lembra que nossos campos da tela de Cadastro tem a propriedade Modifiers como Public? Então, é agora que entenderemos o porquê disso.

Veja a codificação no evento click do botão Alterar:

Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click If lsvDados.SelectedItems.Count > 0 Then Dim instancia As New Cadastro() instancia.IdCliente = Integer.Parse(lsvDados.Items(index).Text) instancia.txtNome.Text = lsvDados.Items(index).SubItems(1).Text instancia.txtEndereco.Text = lsvDados.Items(index).SubItems(2).Text instancia.mtbTelefone.Text = lsvDados.Items(index).SubItems(3).Text If lsvDados.Items(index).SubItems(4).Text.Equals("Sim") Then instancia.rbtAtivo.Checked = True Else instancia.rbtInativo.Checked = True End If instancia.ShowDialog() Me.Close() End If End Sub

Entenderam? Dessa forma eu passo para os campos do form de Cadastro os valores de meu ListView (como este é um teste não passei todos os valores).

Finalizando, faça os testes. Veja os mesmos nas Figuras 4, 5 e 6:


Figura 4: Método GravarCliente


Figura 5: Método ConsultarClientes e ExcluirCliente


Figura 6: Método AlterarCliente

Assim finalizo o artigo. Muito obrigado a todos!

Um abraço, e até o próximo artigo.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados