![]() |
Qual a melhor abordagem para exibir informações de um banco de dados em um formulário Windows Forms ? |
Para procurar entender o problema vamos montar o seguinte cenário:
Você possui um projeto que possui uma classe Cliente, uma classe Banco uma classe Contas conforme mostra o diagrama de classe abaixo:
Considere a existência de um banco de dados BancoDB e das tabelas Bancos e Clientes possuindo colunas com os mesmos nomes das propriedades das classes Banco e Cliente.
Considere também que a string de conexão esta presente no arquivo App.Config na seção connectionStrings.
Em sua aplicação você tem um Windows Forms que chama um método ExibirConta() de uma classe Contas() que acessa dados em um banco de dados relacional SQL Server cujo objetivo é exibir os dados de um cliente em caixas de textos no formulário conforme mostra a figura abaixo:
Recursos usados:
Para realizar essa tarefa você tem a sua disposição 3 opções que vamos descrever a seguir:
1 - Usar o método ExibirConta() que retorna um objeto do tipo Contas com campos preenchidos com dados do banco de dados:
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace WF_ExibirDados
{
public class Contas
{
string numeroConta;
string nomeConta;
string nomeBanco;
string tipoConta;
frmDetalhesConta form = new frmDetalhesConta();
public Contas ExibirConta(string numeroConta)
{
this.numeroConta = numeroConta;
var conexaoBD = ConfigurationManager.ConnectionStrings["BancoDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(conexaoBD))
{
SqlCommand cmd = new SqlCommand("SELECT Cliente.Nome, Banco.ContaNome, Banco.BancoNome,
Banco.ContaTipo FROM Banco INNER JOIN Cliente ON
Banco.ClienteId = Cliente.ClienteId WHERE
(Banco.ContaNumero = @numeroConta)", con);
cmd.Parameters.Add("@numeroConta", SqlDbType.Char).Value = numeroConta;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
//NomeCliente não é membro da classe Contas
form.txtNomeCliente.Text = rdr.GetString(0);
this.nomeConta = rdr.GetString(1);
this.nomeBanco = rdr.GetString(2);
this.tipoConta = rdr.GetString(3);
return this;
}
}
}
}
|
Para obter os dados e preenche o formulário você usaria o evento Click do botão Enviar passando o número da conta conforme mostra o código abaixo:
private void btnConsultar_Click(object sender, EventArgs e)
{
//Cria uma instancia da classe Conta
Contas contaBancaria = new Contas();
//Invoca o método ExibirConta passando o numero da conta
contaBancaria = contaBancaria.ExibirConta(txtNumeroConta.Text);
// Obtem o valor dos campos e atribuir ao TextBox
txtNomeBanco.Text = contaBancaria.nomeBanco;
txtNomeConta.Text = contaBancaria.nomeConta;
txtTipoConta.Text = contaBancaria.tipoConta;
}
|
2 - A segunda opção é retornar um objeto DataReader que será usado pelo formulário para obter os dados:
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace WF_ExibirDados
{
public class Contas
{
string numeroConta;
string nomeConta;
string nomeBanco;
string tipoConta;
public SqlDataReader ExibirConta(string numeroConta)
{
this.numeroConta = numeroConta;
var conexaoBD = ConfigurationManager.ConnectionStrings["BancoDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(conexaoBD))
{
SqlCommand cmd = new SqlCommand("SELECT Cliente.Nome, Banco.ContaNome, Banco.BancoNome,
Banco.ContaTipo FROM Banco INNER JOIN Cliente ON
Banco.ClienteId = Cliente.ClienteId WHERE
(Banco.ContaNumero = @numeroConta)", con);
cmd.Parameters.Add("@numeroConta", SqlDbType.Char).Value = numeroConta;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
return rdr;
}
}
}
}
|
Nesta abordagem vamos obter os dados do objeto SqlDataReader:
private void btnConsultar_Click(object sender, EventArgs e)
{
//Cria uma instancia da classe Conta
Contas contaBancaria = new Contas();
//Invoca o método ExibirConta passando o numero da conta
SqlDataReader dr = contaBancaria.ExibirConta(txtNumeroConta.Text);
// Obtem o valor dos campos e atribuir ao TextBox
txtNomeBanco.Text = dr.GetString(1);
txtNomeConta.Text = dr.GetString(2);
txtTipoConta.Text = dr.GetString(3);
}
|
3 - Na terceira opção você acessa os dados e os atribui diretamente aos campos do formulário no método ExibirConta():
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace WF_ExibirDados
{
public class Contas
{
string numeroConta;
string nomeConta;
string nomeBanco;
string tipoConta;
frmDetalhesConta form = new frmDetalhesConta();
public void ExibirConta(string numeroConta)
{
this.numeroConta = numeroConta;
var conexaoBD = ConfigurationManager.ConnectionStrings["BancoDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(conexaoBD))
{
SqlCommand cmd = new SqlCommand("SELECT Cliente.Nome, Banco.ContaNome, Banco.BancoNome,
Banco.ContaTipo FROM Banco INNER JOIN Cliente ON
Banco.ClienteId = Cliente.ClienteId WHERE
(Banco.ContaNumero = @numeroConta)", con);
cmd.Parameters.Add("@numeroConta", SqlDbType.Char).Value = numeroConta;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
form.txtNomeCliente.Text = rdr[0].ToString(); form.txtNomeConta.Text = rdr[1].ToString(); form.txtNomeBanco.Text = rdr[2].ToString(); form.txtTipoConta.Text = rdr[3].ToString(); } } } } |
Pois bem, das 3 opções elencadas acima qual seria a mais adequada para usar em sua aplicação ?
Vou responder no próximo artigo...
Pegue
o projeto completo aqui :
WF_ExibirDados.zip
Salmos 111:2
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Novidades da versão 7.0 - Macoratti
C# - O tipo Dynamic - Macoratti.net
C# - Localizando Arquivos - Macoratti
C# - Usando OpenFileDialog - Macoratti
C# - Exibindo Arquivos e diretórios no TreeView - Macoratti
C# - LINQ : Calculando o total e o tamanho de arquivos em ... - Macoratti
C# - Copiando Arquivos - Macoratti
C# - Compactando e Descompactando diretórios - Macoratti.net