C# - Localizando dados em um formulário e exibindo em outro


Este artigo é para iniciantes e mostra como podemos acessar informações em um banco de dados SQL Server usando stored procedures em um formulário e exibir o resultado em outro formulário.

Abra o Visual Studio 2012 Express for desktop e clique em New Project;

A seguir selecione a linguagem Visual C# e o template Windows Forms Application e informe o nome ProcurandoExibindoDados;

Após criar o projeto no menu PROJECT clique em Add Reference;

A seguir selecione e marque o item System.Configuration e clique em OK

Iremos usar o namespace System.Configuration para acessar a string de conexão no arquivo App.Config.

Neste exemplo eu vou usar um banco de dados SQL Server chamado Cadastro e a tabela Clientes que possui a seguinte estrutura e dados:

Vamos criar uma stored procedure no banco de dados clicando com o botão direito sobre o item Stored Procedure e selecionando Add New Stored Procedure;

A seguir digite o código mostrado a seguir:

Criamos a stored procedure LocalizarPorNome que utiliza o parâmetro nome e a instrução SQL : SELECT * FROM CLIENTES WHERE NOME LIKE @NOME + '%'

No arquivo App.Config inclua a definição da string de conexão com o banco de dados Cadastro conforme mostrado a seguir:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <connectionStrings>
    <add name="SqlServerCadastro" connectionString="Data Source=.\sqlexpress;Initial Catalog=Cadastro;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>

  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Agora vamos incluir no formulário form1.cs que foi criado por padrão um controle Label, um controle TextBox(txtNome) e um controle Button(btnProcurar) conforme mostra o leiaute abaixo:

Agora defina o seguinte código para este formulário:

using System;
using System.Data;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;

namespace ProcurandoExibindoDados
{
    public partial class Form1 : Form
    {
        string strconn = ConfigurationManager.ConnectionStrings["SqlServerCadastro"].ConnectionString;

        public Form1()
        {
            InitializeComponent();
        }
        
        private void btnProcurar_Click(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(txtNome.Text))
            {
                 MessageBox.Show("Informe o nome para localizar.", "Localizar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                Form2 frmDetalhesClientes = new Form2();

                SqlConnection sqlconn = new SqlConnection(strconn);
                sqlconn.Open();
                SqlCommand cmdProcuraClientes = new SqlCommand("LocalizarPorNome", sqlconn);
                cmdProcuraClientes.CommandType = CommandType.StoredProcedure;

                SqlDataAdapter da = new SqlDataAdapter(cmdProcuraClientes);
                DataSet dsClientes = new DataSet();

                da.SelectCommand.Parameters.AddWithValue("@NOME", SqlDbType.VarChar).Value = txtNome.Text.Trim();
                da.Fill(dsClientes);

                if (dsClientes.Tables[0].Rows.Count > 0)
                {
                    frmDetalhesClientes.dsGetDetalhes = dsClientes;
                    frmDetalhesClientes.Show();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

Este código realiza a conexão com o banco de dados e utiliza a stored procedure LocalizarPorNome para obter as informações da tabela Clientes.

A seguir o método dsGetDetalhes do formulário form2.cs é chamado preenchendo o dataset com os valores obtidos no formulário form1.cs.

No menu PROJECT clique em Add Windows Forms e aceite o nome Form2.cs;

A seguir inclua os seguintes controles neste formulário:

Este formulário irá apenas exibir os dados dos clientes nos controles TextBox.

A seguir digite o código abaixo neste formulário:

using System;
using System.Data;
using System.Windows.Forms;

namespace ProcurandoExibindoDados
{
    public partial class Form2 : Form
    {
      
        //declara um dataset privado que armazena os detalhes 
        //que serão armazenados no dataset public dsGetDetalhes 
        private DataSet dsDetalhesClientes; 

        public DataSet dsGetDetalhes
        {
            get
            {
                return dsDetalhesClientes;
            }
            set
            {
                dsDetalhesClientes = value;
            }
        }

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            GetClientesForm1(); //chama a função
        }

        private void GetClientesForm1() //exibe detalhes dos clientes
        {
            try
            {
                txtID.Text = dsDetalhesClientes.Tables[0].Rows[0]["id"].ToString();
                txtNome.Text = dsDetalhesClientes.Tables[0].Rows[0]["nome"].ToString();
                txtEndereco.Text = dsDetalhesClientes.Tables[0].Rows[0]["endereco"].ToString();
                txtTelefone.Text = dsDetalhesClientes.Tables[0].Rows[0]["telefone"].ToString();
                txtEmail.Text = dsDetalhesClientes.Tables[0].Rows[0]["email"].ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}

O código acima obtém os dados do dataset com as informações do cliente obtidas no formulário form1.cs e exibe o resultado nas caixas de texto do formulário form2.cs.

Executando o projeto o formulário para localizar dados é apresentado. Digite um nome e clique no botão Procurar:

As informações serão exibidas no formulário form2.cs conforme abaixo:

Pegue o projeto completo aqui: ProcurandoExibindoDados.zip

Mateus 15:3 Ele (Jesus), porém, respondendo, disse-lhes: E vós, por que transgredis o mandamento de Deus por causa da vossa tradição ?

Referências:


José Carlos Macoratti