EF Core - Copiando dados de um ListBox para o SQL Server
Neste artigo veremos como copiar os dados selecionados de um ListBox para um banco de dados SQL Server usando o EF Core e a linguagem C#. |
Vamos supor que você tenha um banco de dados SQL Server chamado Cadastro e uma tabela Clientes com os seguintes dados:
Em uma aplicação Windows Forms você possui um formulário onde um controle ListBox exibe os dados carregados de um fonte de dados. Essa fonte de dados pode ser um banco de dados, um arquivo texto, um arquivo XML, etc.
Você deseja selecionar um item da ListBox , exibir os seus detalhes no formulário e salvar o item selecionando na tabela Clientes.
Como fazer isso ?
Para fazer isso podemos usar diversas abordagens, e, neste artigo eu vou usar o Entity Framework Core 2.1 para realizar essa tarefa.
Então mãos à obra...
Criando o projeto Windows Forms no VS 2017 Community
Abra o VS 2017 Community e crie um novo projeto do tipo Windows Forms usando o .NET Framework 4.6.2 com o nome de CShp_ListboxDB.
Nota: Para poder usar o EF Core com o .NET Framework você tem que usar a versão 4.6.1 ou superior.
Agora vamos incluir uma referência ao Entity Framework Core para acessar o SQL Server : Microsoft.EntityFrameworkCore.SqlServer
Acesse via menu Tools -> Nuget Package Manager -> Manage Nuget Packages for Solution e clique na guia Browse e selecione o pacote e instale no projeto:
A seguir a partir da Toolbox inclua os seguintes controles no formulário Form1.cs:
Disponha os controles conforme o leiaute da figura abaixo:
Definindo a string de conexão no arquivo App.Config
Vamos armazenar a informação da string de conexão com o banco de dados Cadastro que desejamos acessar no arquivo App.Config.
Abra o arquivo e inclua o código abaixo:
... <connectionStrings> <add name="conexaoSQL" connectionString="Data Source=MACORATTI;Initial Catalog=Cadastro;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> ,,, |
Aproveitando, vamos incluir uma referência ao namespace System.Configuration ao projeto via menu Project -> Add Reference.
Precisamos desta referência para acessar a string de conexão no arquivo App.Config.
Criando o modelo de entidades, a classe de contexto e o Serviço
Crie uma pasta chamada Model no projeto e nesta pasta crie a classe Cliente com o seguinte código:
public class Cliente
{
public int ClienteId { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
public int Idade { get; set; }
public string Pais { get; set; }
public override string ToString() => $"{Nome} - {Email}".Trim();
}
|
A seguir crie a classe AppDbContext com o código abaixo:
using Microsoft.EntityFrameworkCore;
using System.Configuration;
public class AppDbContext : DbContext
{
public DbSet<Cliente> Clientes { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["ConexaoSQL"].ConnectionString);
}
}
|
Crie outra pasta chamada Service no projeto e a crie a classe ClienteService com o código mostrado abaixo:
using CShp_ListboxDB.Model;
using System.Collections.Generic;
namespace CShp_ListboxDB.Service
{
public class ClienteService
{
public static List<Cliente> GetClientes()
{
var listaClientes = new List<Cliente>()
{
new Cliente {Nome="Jose Carlos Sá ", Pais="Brasil", Email= "macoratti@yahoo.com", Idade=31},
new Cliente {Nome="Miriam Batucada", Pais="Brasil", Email= "mimi@hotmail.com", Idade=21},
new Cliente {Nome="Jefferson Airplane", Pais="Brasil", Email= "jefferson@hotmail.com", Idade=25},
new Cliente {Nome="Bianca Barraco", Pais="Brasil", Email= "bianca@hotmail.com", Idade=20},
new Cliente {Nome="Marcia Uber", Pais="Brasil", Email= "marcia@hotmail.com", Idade=25},
new Cliente {Nome="Janice Sampa", Pais="Brasil", Email= "janice@hotmail.com", Idade=23},
new Cliente {Nome="Luzia Alegria", Pais="Brasil", Email= "luzia@hotmail.com", Idade=38}
};
return listaClientes;
}
}
}
|
Este serviço vai fornecer os dados que vamos exibir no ListBox. Aqui você pode alterar o código para obter os dados de outras fontes.
Definindo o código do formulário
Vamos declarar no início do formulário Fom1.cs uma variável para receber o cliente selecionado:
Cliente clienteSelecionado;
No evento Click do botão Carregar Dados temos o código que vai preencher o listbox com dados do serviço:
private void btnCarregar_Click(object sender, EventArgs e)
{
try
{
ExibirClientes();
}
catch (Exception ex)
{
MessageBox.Show("Erro " + ex.Message);
}
}
|
Abaixo temos o código do método ExibirClientes() que vai usar o serviço e exibir os dados no ListBox:
private void ExibirClientes()
{
try
{
lbDados.Items.Clear();
var clientes = ClienteService.GetClientes();
foreach (var cliente in clientes)
lbDados.Items.Add(cliente);
}
catch (Exception)
{
throw;
}
}
|
No evento SelectedIndexChanged do ListBox temos o código para obter os dados do cliente selecionado e exibí-los nos TextBox do formulário:
private void lbDados_SelectedIndexChanged(object sender, EventArgs e)
{
clienteSelecionado = (Cliente)lbDados.SelectedItem;
txtNome.Text = clienteSelecionado.Nome;
txtEmail.Text = clienteSelecionado.Email;
txtPais.Text = clienteSelecionado.Pais;
txtIdade.Text = clienteSelecionado.Idade.ToString();
}
|
Finalmente no evento Click do botão Salvar Dado Selecionado temos o código que cria uma instância do contexto e usa o método Add para incluir a entidade selecionada no contexto e a seguir usando o método SaveChanges() para persistir as informações do banco de dados:
private void btnSalvar_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Deseja salvar este cliente ?","Salvar Cliente", MessageBoxButtons.YesNo ) ==
DialogResult.Yes)
{
using (var contexto = new AppDbContext())
{
contexto.Add(clienteSelecionado);
contexto.SaveChanges();
}
}
}
|
Executando o projeto iremos obter o seguinte resultado:
Inicialmente temos o formulário principal, após clicar no botão - Carregar Dados - vemos o ListBox exibir os dados selecionados.
Selecionando um item do ListBox vemos as informações exibidas nos TextBox do formulário e ao clicar no botão - Salvar Dado Selecionado , o cliente selecionado vai ser persistido na tabela Clientes.
Abrindo o SQL Server Management Studio e verificando a tabela Clientes vemos os dados do cliente selecionado na tabela conforme mostra a figura abaixo:
Assim, usando o EF Core fica muito fácil persistir informações em um banco de dados relacional como o SQL Server.
Pegue o projeto completo aqui : CShp_ListboxDB.zip
"Jesus respondeu, e disse-lhe: Se alguém me ama, guardará a
minha palavra, e meu Pai o amará, e viremos para ele, e faremos nele morada."
João 14:23
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
EF Core - Usando a abordagem DataBase First - Criando ... - Macoratti