none
Gerar código automático no TextBox RRS feed

  • Pergunta

  • Bom dia..

    Estou criando uma aplicação no C#, sou iniciante ainda, tenho um campo no meu cadastro de cliente, o campo txtCodigo, e preciso que este campo gere um numero sequencial automático, toda vez que eu clicar no botão para inserir um novo registo, não posso pegar direito do banco de dados, porque este código tem 6 caracteres, Ex. 000001. Tem como fazer um código para resolver este problema

    Desde já agradeço.


    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 10:45

Respostas

  • Tem um erro de digitação no INSERTED (faltou um E):

    private void btnIncluir_Click(object sender, EventArgs e)
            {
                conm.Open();
                comando.CommandText = "INSERT INTO tbl_Cliente(Nome, RG, CPF, Endereco, Numero, Complemento, Bairro, Cidade, Estado, CEP, Telefone, Celular ) OUTPUT inserted.IDCliente VALUES ('" + TxtCliente.Text + "', '" + TxtRG.Text + "', '" + TxtCPF.Text + "', '" + TxtEndereco.Text + "', '" + TxtNumero.Text + "', '" + TxtComplemento.Text + "', '" + TxtBairro.Text + "', '" + TxtCidade.Text + "', '" + TxtEstado.Text + "', '" + TxtCEP.Text + "', '" + TxtTelefone.Text + "', '" + TxtCelular.Text + "')";
                var idNovo = Convert.ToInt32(comando.ExecuteNonQuery());
    
                nomeDoTextBox.Text = idNovo.ToString();
    
                conm.Close();
    
            }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Junior Guerreiro segunda-feira, 3 de abril de 2017 18:23
    segunda-feira, 3 de abril de 2017 17:52
  • Sim, é possível:

    nomeDoTextBox.Text = idNovo.ToString("D6");


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Junior Guerreiro segunda-feira, 3 de abril de 2017 18:24
    segunda-feira, 3 de abril de 2017 18:22

Todas as Respostas

  • Bom dia,

    Se você não for consultar no banco o último sequencial gerado, há grande chance de ter problemas com concorrência/dados duplicados. Se o problema é exibir o número sempre com 6 dígitos, basta formatar o mesmo.

    Ex:

    int valor = 56;
    Console.WriteLine(valor.ToString("D6")); // saída: 000056


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 3 de abril de 2017 10:56
  • Bom dia..

    Desculpa mas acho que não expressei direito, eu tenho sim que consultar o campo no banco para saber qual foi o ultimo código inserido, mas então como faço para pegar o valor direito do meu campo da minha tabela do sql, para sim evitar problemas de duplicidade com o código, vc pode me explicar.

    Obrigado


    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 11:11
  • Você pretende buscar este valor antes mesmo de inserir o novo registro? Caso sim, como pretende tratar o cancelamento da inclusão (usuário A iria inserir registro 8 e cancela, mas enquanto isso usuário B iria inserir registro 9, logo ficaria um "buraco" entre os sequenciais).

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 3 de abril de 2017 12:02
  • Então o que quero fazer e o seguinte, tenho um botão chamado Inserir novo registo, quando clico nesse botão ele insere uma linha na minha tabela com o numero do código preenchido no textbox, o código que e gerado no campo IDCliente que tenho na minha tabela no slq, ai quando eu preencher os campos do cadastro tenho um outro botão gravar, para gravar os dados no tabela de cliente no banco de dados.

    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 14:02
  • Se no click do botão Inserir você já vai adicionar o registro em sua tabela do banco, você pode definir sua coluna como IDENTITY e usar o OUTPUT na sua instrução de INSERT.

    Ex:

    INSERT INTO Tabela (CAMPO_A, ...)
    OUTPUT INSERTED.CAMPO_ID
    VALUES (...)
    Deste modo após o INSERT você terá o sequencial que foi gerado para o novo registro e poderá preencher seu textbox.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 3 de abril de 2017 14:36
  • Juliano boa tarde.

    Ainda não consegui resolver, vc pode me ajudar segue abaixo meu codigo.

    public partial class frmClientes : Form
        {
            SqlConnection conm = new SqlConnection("Data Source=JUNIOR-NT;Initial Catalog=GSTSOLUTIONS;Persist Security Info=True;User ID=sa;Password=SQL");
            SqlCommand comando = new SqlCommand();
            SqlDataReader dr;

            public frmClientes()
            {
                InitializeComponent();
            }

            private void frmClientes_Load(object sender, EventArgs e)
            {
                comando.Connection = conm;
            }

            private void btnIncluir_Click(object sender, EventArgs e)
            {
                conm.Open();
                comando.CommandText = "INSERT INTO tbl_Cliente(Nome, RG, CPF, Endereco, Numero, Complemento, Bairro, Cidade, Estado, CEP, Telefone, Celular ) OUTPUT INSERTD.IDCliente VALUES ('" + TxtCliente.Text + "', '" + TxtRG.Text + "', '" + TxtCPF.Text + "', '" + TxtEndereco.Text + "', '" + TxtNumero.Text + "', '" + TxtComplemento.Text + "', '" + TxtBairro.Text + "', '" + TxtCidade.Text + "', '" + TxtEstado.Text + "', '" + TxtCEP.Text + "', '" + TxtTelefone.Text + "', '" + TxtCelular.Text + "')";
                comando.ExecuteNonQuery();
                conm.Close();

            }

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

            private void btnNovo_Click(object sender, EventArgs e)
            {
                
                
                
                //TxtCliente.Text     = "";
                TxtRG.Text          = "";
                TxtCPF.Text         = "";
                TxtEndereco.Text    = "";
                TxtNumero.Text      = "";
                TxtComplemento.Text = "";
                TxtBairro.Text      = "";
                TxtCidade.Text      = "";
                TxtEstado.Text      = "";
                TxtCEP.Text         = "";
                TxtTelefone.Text    = "";
                TxtCelular.Text     = "";
                

            }

            private void btnSalvar_Click(object sender, EventArgs e)
            {
                Address endereco = SearchZip.GetAddress(TxtCEP.Text);
                if (endereco.Zip != null)
                {
                    TxtEndereco.Text = endereco.Street;
                    TxtBairro.Text = endereco.District;
                    TxtCidade.Text = endereco.City;
                    TxtEstado.Text = endereco.State;
                }
                else
                {
                    MessageBox.Show("Por favor preecha o campo do cep com um cep válido");
                    TxtCEP.Text = "";
                    return;
                }
            }
        }
    }


    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 17:27
  • Tem um erro de digitação no INSERTED (faltou um E):

    private void btnIncluir_Click(object sender, EventArgs e)
            {
                conm.Open();
                comando.CommandText = "INSERT INTO tbl_Cliente(Nome, RG, CPF, Endereco, Numero, Complemento, Bairro, Cidade, Estado, CEP, Telefone, Celular ) OUTPUT inserted.IDCliente VALUES ('" + TxtCliente.Text + "', '" + TxtRG.Text + "', '" + TxtCPF.Text + "', '" + TxtEndereco.Text + "', '" + TxtNumero.Text + "', '" + TxtComplemento.Text + "', '" + TxtBairro.Text + "', '" + TxtCidade.Text + "', '" + TxtEstado.Text + "', '" + TxtCEP.Text + "', '" + TxtTelefone.Text + "', '" + TxtCelular.Text + "')";
                var idNovo = Convert.ToInt32(comando.ExecuteNonQuery());
    
                nomeDoTextBox.Text = idNovo.ToString();
    
                conm.Close();
    
            }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Junior Guerreiro segunda-feira, 3 de abril de 2017 18:23
    segunda-feira, 3 de abril de 2017 17:52
  • Ok Juliano blz deu certinho aqui obrigado.

    Agora só mais uma coisa, e possível colocar zeros a esquerda no textbox. se for como posso fazer isso.


    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 18:18
  • Sim, é possível:

    nomeDoTextBox.Text = idNovo.ToString("D6");


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Junior Guerreiro segunda-feira, 3 de abril de 2017 18:24
    segunda-feira, 3 de abril de 2017 18:22
  • Muito obrigado Juliano, deu tudo certinho aqui vlw.

    JUNIOR GUERREIRO T.I

    segunda-feira, 3 de abril de 2017 18:25