Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Fiz um sistema de cadastro de clientes com tabela SQL... como fazer com que ao preecher o campo CPF e pressionar a key TAB os dados do cliente (caso já seja um cliente cadastrado) sejam completados na tela?

private void mskCPF_Leave(object sender, EventArgs e)
        {

            try
            {

                //TAClientes.FillByBuscaCliCPF(?, mskCPF.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao tentar localizar CPF: " + ex.Message);
                throw;
            }
        }
5 respostas

Oi Paulo, tudo bem?

Existem várias maneiras de fazer isso. Uma delas é

  • configurar uma conexão com SQL Server
  • abrir a conexão
  • fazer uma consulta SQL e obter os dados do cliente usando o SqlDataReader, por exemplo:

https://docs.microsoft.com/pt-br/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

static void HasRows(SqlConnection connection)
{
    using (connection)
    {
        SqlCommand command = new SqlCommand(
          "SELECT CategoryID, CategoryName FROM Categories;",
          connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
                    reader.GetString(1));
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        reader.Close();
    }
}

Depois que você já obteve os dados, basta preencher os campos da tela com essas informações do cliente.

Muito obrigado Marcelo. Porém acho que não fui muito claro na minha dúvida, desculpe.

O que eu gostaria é que se o cliente digitar um CPF

Print da janela http://prntscr.com/miewat

e pressionar TAB ou ir para outro campo, o sistema ja verificar se esse CPF se encontra cadastrado no banco

Print da janela http://prntscr.com/miex02

Ai no form anterior os dados ja seriam preenchidos automaticamente com o NOME, TELEFONE, ENDEREÇO

Porém não estou conseguindo fazer esse tipo de conexão.

https://github.com/paheoli/cadastrocliente/blob/master/frmCliente.cs

Desde já agradeço muito

Você pode tentar chamar o méto abaixo. Não testei, então não sei se está funcionando direito:

public void PreencheDados()
{
    string connetionString = "Data Source=SERVIDOR;Initial Catalog=BANCO_DE_DADOS;Integrated Security=True";
    using (var con = new SqlConnection(connetionString))
    {
        using (SqlCommand cmd = new SqlCommand("Select CPF, Nome, Endereco, Telefone from Clientes where CPF = @cpf", con))
        {
            cmd.Parameters.AddWithValue("@cpf", this.txtCPF.Text);
            con.Open();
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read())
                {
                    this.txtNome.Text = dr[1].ToString();
                    this.txtEndereco.Text = dr[2].ToString();
                    this.txtTelefone.Text = dr[3].ToString();
                }
            }
        }
    }
}

Obrigado, queria só confirmar se o string da minha conexão com o SQL esta correto, pois esta aparecendo essa excessão quando executo o método.

PRINT http://prntscr.com/ml59fk

private void PreencheDados(object sender, EventArgs e)
        {
            string connectionString = "Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=Dados.mdf;Integrated Security=True";
            using (var con = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand("Select CPF, Nome, Endereco, Telefone from Clientes where CPF = @cpf", con))
                {
                    cmd.Parameters.AddWithValue("@cpf", this.mskCPF.Text);
                    con.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                        {
                            this.txtNome.Text = dr[1].ToString();
                            this.txtEndereco.Text = dr[2].ToString();
                            this.mskTelefone.Text = dr[3].ToString();
                        }
solução!

Oi Paulo, experimente trocar sua ConnectionString de:

string connectionString = "Data Source=(LocalDB)MSSQLLocalDB;
AttachDbFilename=Dados.mdf;
Integrated Security=True";

para:

string connectionString = "Data Source=(LocalDB)MSSQLLocalDB;
AttachDbFilename=|DataDirectory|\Dados.mdf;
Integrated Security=True";

Isto funcionará se o arquivo Dados.mdf estiver na raiz do projeto. Se você quiser mudar a localização do .mdf, terá que redefinir o DataDirectory assim:

AppDomain.CurrentDomain.SetData("DataDirectory", 
novo_diretorio_para_o_mdf)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software