Auto increment skipping values

Asked

Viewed 46 times

1

I am developing a code initially registration and login, everything ok.
I added a Unique Constraint to the database columns that I don’t want you to repeat and it worked fine. However, I would like to know how I can treat this repetition also in the C#code, since, if a person puts a duplicated email for example, I would like the message to appear: "E-mail already registered!".

And another downside, as I didn’t deal with in C#, when I try to insert a repeated die, it doesn’t really enter the bank, okay. But, the ID that is with auto_increment pula, IE, if it was inserted in the bank until the ID 1, tried to insert 4 times a duplicate data, the next storage in the bank goes to ID 5, as in the image:

inserir a descrição da imagem aqui

The code so far is like this:

public string Cadastrar(string nome, string email, string senha, string confirmarsenha, string celular, string lembretesenha)
{

    // checar se campos não estão em branco
    if (!email.Equals("") && !senha.Equals("") && !celular.Equals("") && !lembretesenha.Equals(""))
    {
        // checar se senha e email tem caracteres minimos
        if (senha.Length >= 5 && email.Length >= 3)
        {
            // checar se senha é igual a confirmar senha
            if (senha.Equals(confirmarsenha))
            {
                comando.CommandText = "insert into funcionario(nome, email, senha, celular, lembretesenha)values(@nome, @email, @senha, @celular, @lembretesenha);";
                comando.Parameters.AddWithValue("@nome", nome);
                comando.Parameters.AddWithValue("@email", email);
                comando.Parameters.AddWithValue("@senha", senha);
                comando.Parameters.AddWithValue("@celular", celular);
                comando.Parameters.AddWithValue("@lembretesenha", lembretesenha);

                check = false;
                try
                {
                    comando.Connection = conect.Conectar();
                    comando.ExecuteNonQuery();
                    conect.Desconectar();
                    this.mensagem = "Cadastrado com sucesso!";

                    check = true;
                }

                catch (SqlException)
                {
                    this.mensagem = "Erro com o banco de dados!";
                }
            }

            else
            {
                MessageBox.Show("As senhas devem ser iguais!");
            }
        }
        else
        {
            MessageBox.Show("Por favor, use uma senha com mais de 5 caracteres!");
        }
    }
    else
    {
        MessageBox.Show("Por favor, não deixe campos em branco!");
    }
    return mensagem;
}
  • Following its Programming structure. You could create a method to check if the user is already registered. In case he’s already here, you wouldn’t call his routines criminal record.

1 answer

0

You could create the following method:

 public bool VerificarLoginExistente(string login)
    {
        comando.CommandText = "select * from funcionario where email = @login";
        comando.Parameters.AddWithValue("@login", login);
       
        try
        {
            comando.Connection = conect.Conectar();
            armazenardados = comando.ExecuteReader();

            if (armazenardados.HasRows)
            {
                check = true;
            }
            conect.Desconectar();
            armazenardados.Close();
        }

        catch (SqlException)
        {
            this.mensagem = "Erro com banco de dados!";
        }
        return check;
    }

In the registration method you could do the verification before executing the registration:

public string Cadastrar(string nome, string email, string senha, string confirmarsenha, string celular, string lembretesenha)
    {

         if(!VerificarLoginExistente(login)){
        // checar se campos não estão em branco
        if (!email.Equals("") && !senha.Equals("") && !celular.Equals("") && !lembretesenha.Equals(""))
        {
            // checar se senha e email tem caracteres minimos
            if (senha.Length >= 5 && email.Length >= 3)
            {
                // checar se senha é igual a confirmar senha
                if (senha.Equals(confirmarsenha))
                {
                    comando.CommandText = "insert into funcionario(nome, email, senha, celular, lembretesenha)values(@nome, @email, @senha, @celular, @lembretesenha);";
                    comando.Parameters.AddWithValue("@nome", nome);
                    comando.Parameters.AddWithValue("@email", email);
                    comando.Parameters.AddWithValue("@senha", senha);
                    comando.Parameters.AddWithValue("@celular", celular);
                    comando.Parameters.AddWithValue("@lembretesenha", lembretesenha);

                    check = false;
                    try
                    {
                        comando.Connection = conect.Conectar();
                        comando.ExecuteNonQuery();
                        conect.Desconectar();
                        this.mensagem = "Cadastrado com sucesso!";

                        check = true;
                    }

                    catch (SqlException)
                    {
                        this.mensagem = "Erro com o banco de dados!";
                    }
                }

                else
                {
                    MessageBox.Show("As senhas devem ser iguais!");
                }
            }
            else
            {
                MessageBox.Show("Por favor, use uma senha com mais de 5 caracteres!");
            }
        }
        else
        {
            MessageBox.Show("Por favor, não deixe campos em branco!");
        }
        return mensagem;
    }

   }
}

NOTE: I didn’t check if the identation is correct. It’s just to make the idea clearer.

I hope I’ve helped.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.