none
Como Verificar se o Id já existe?

    Question

  • Prezados verifiquei em outros posts mas não consegui solucionar meu problema,

    Estou desenvolvendo um aplicativo windows form c# e preciso de ajuda para Verificar se o Id ja existe antes de gravar no banco.

    O motivo de ter que verificar se o Id já existe antes de gravar é porque foram feitos 3 metodos de insert pois são 3 tabelas diferentes.

    O grid esta sendo chamado na forma deste thread 

    Comecei a desenvolver algo tipo isso mas acho que esta errado:

    // Na classe ADO

    //String sql para localizar o id

            public const string strVerificaId = "select * from parceria where parceria_id=@parceria_id";

    // Na classe ADO

    public void VerificaId(int PARCERIA_ID)
            {
                {
                    using (MySqlCommand objCommand = new MySqlCommand(strVerificaId, strConexao))
                    {
                        objCommand.Parameters.AddWithValue("@PARCERIA_ID", PARCERIA_ID);
    
                        strConexao.Open();
    
                        objCommand.ExecuteNonQuery();
    
                        strConexao.Close();
                    }
                }
            }

    //No form

    //Metodo

    private void VerificaId(int PARCERIA_ID)
            {
                try
                {
                    ADO_Parceria objDados = new ADO_Parceria();
                    objDados.VerificaId(PARCERIA_ID);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("id erro" + ex.Message);
                }
            }
    

    //No form

    //Chamada do botão

     private void Btn_VerificaId_Click(object sender, EventArgs e)
            {
                
                    VerificaId(Convert.ToInt32(Txt_CodigoImovel.Text));
                
            }

    No metodo eu tenho que implementar algo para verificar se o id ja existe mas n sei como....

    Obrigado.

    Att,

    Vinicius Gersen

    Wednesday, April 11, 2012 3:29 PM

Answers

  • Existem várias soluções, vou te dar uma delas, você deveria retornar algo nesse método VerificaId, está executando a query no banco corretamente mas não está voltando nada para você saber se existe ou não o Id.

    O método ExecuteNonQuery que você está usando retorna o número de linhas afetadas na query então eu sugiro que você coloque um retorno int no "VerificaId" desse forma:

    public int VerificaId(int PARCERIA_ID) {

    int retorno = 0; using (MySqlCommand objCommand = new MySqlCommand(strVerificaId, strConexao)) { objCommand.Parameters.AddWithValue("@PARCERIA_ID", PARCERIA_ID); strConexao.Open(); retorno = objCommand.ExecuteNonQuery(); strConexao.Close(); }

    return retorno;

    }

    Uma vez que o "VerificaId está retornando o número de linahs afetadas, isso significa se o retorno for 0 significa que o Id não existe, se for amios que 0 significa que ele já existe, aí é simples, seu método Btn_VerificaId_Click ficará assim:

    private void Btn_VerificaId_Click(object sender, EventArgs e) {

    if (VerificaId(Convert.ToInt32(Txt_CodigoImovel.Text)) == 0) //Id não existe else //Id existe }

    Espero ter ajudado, abraços!




    thiagokoelho

    Wednesday, April 11, 2012 9:14 PM

All replies

  • Existem várias soluções, vou te dar uma delas, você deveria retornar algo nesse método VerificaId, está executando a query no banco corretamente mas não está voltando nada para você saber se existe ou não o Id.

    O método ExecuteNonQuery que você está usando retorna o número de linhas afetadas na query então eu sugiro que você coloque um retorno int no "VerificaId" desse forma:

    public int VerificaId(int PARCERIA_ID) {

    int retorno = 0; using (MySqlCommand objCommand = new MySqlCommand(strVerificaId, strConexao)) { objCommand.Parameters.AddWithValue("@PARCERIA_ID", PARCERIA_ID); strConexao.Open(); retorno = objCommand.ExecuteNonQuery(); strConexao.Close(); }

    return retorno;

    }

    Uma vez que o "VerificaId está retornando o número de linahs afetadas, isso significa se o retorno for 0 significa que o Id não existe, se for amios que 0 significa que ele já existe, aí é simples, seu método Btn_VerificaId_Click ficará assim:

    private void Btn_VerificaId_Click(object sender, EventArgs e) {

    if (VerificaId(Convert.ToInt32(Txt_CodigoImovel.Text)) == 0) //Id não existe else //Id existe }

    Espero ter ajudado, abraços!




    thiagokoelho

    Wednesday, April 11, 2012 9:14 PM
  • Thiago,

    Muito Obrigado pela resposta, deu pra esclarecer, mas esta dando erro no if:

    if (VerificaId(Convert.ToInt32(Txt_CodigoImovel.Text)) == 0)

    O método private int VerificaId(int PARCERIA_ID)

    Tinha que ter o retorno int, mas o que eu posso retornar nele?

    Segue print:

    Obrigado.

    Att,

    Vinicius Gersen


    Wednesday, April 11, 2012 9:54 PM
  • Olá Vinícius, faltou trocar a assinatura do método "VerificaId", ele está como void e precisa retornar int:

    public int VerificaId(int PARCERIA_ID)
    

    Abraços, Thiago.

    thiagokoelho

    Wednesday, April 11, 2012 11:19 PM
  • E para acrescentar, aqui segue todos os métodos que você pode fazer com a interface IDbCommand:

    http://msdn.microsoft.com/pt-br/library/system.data.idbcommand_methods.aspx


    thiagokoelho

    Wednesday, April 11, 2012 11:22 PM
  • Thiago,



    Obrigado pela força, marquei como resposta pois me direcionou mas para funcionar eu tive que fazer desta forma:

     //Metodo para verificar se o Id já existe
            public int VerificaId(int PARCERIA_ID)
            {
                int retorno = 0;
    
                //Muda a linha abaixo pra sua tabela e coluna certa
                String strVerificaId = "select count(1) from parceria where PARCERIA_ID = @PARCERIA_ID";
    
                using (MySqlCommand objCommand = new MySqlCommand(strVerificaId, strConexao))
                {
                    objCommand.Parameters.AddWithValue("@PARCERIA_ID", PARCERIA_ID);
                    strConexao.Open();
                    retorno = Convert.ToInt32(objCommand.ExecuteScalar());
                    strConexao.Close();
                    return retorno;
                }
                
            }


    Da forma que me passou quando executava o retorno = objCommand.ExecuteNonQuery(); o resultado era sempre -1



    Muito obrigado mais uma vez.



    Att,

    Vinicius Gersen
    Thursday, April 12, 2012 4:15 AM
  • aó não esqueça de tratar a execução da sua query com um try catch e colocar o retorno sempre no finally, pois se der um erro ou alguma falha antes do retorno?

    thiagokoelho

    Thursday, April 12, 2012 11:20 AM