none
Erro - ao converter string para inteiro. RRS feed

  • Pergunta

  • Pessoal,

     

    Help! To tentando fazer a seguinte conversão.

    inad.Meses_atrasado = Convert.ToInt32(txtMes.Text); ja tentei assim tambem: inad.Meses_atrasado = Int32.Parse(txtMes.Text);

    o campo txtMes é um MasketTextBox... ao tentar fazer a conversão o seguinte erro é apresentado:

    Input string was not in a correct format. (Seqüência de entrada não estava em um formato correto.).

    o que pode ser? a variavel Meses_atrasado: É do tipo int:

     

    class inadimplentes

        {

            int cod_controle;

            string cod_usuario;

            string nome_usuario;

            DateTime dt_inclusao;

            DateTime dt_notificacao;

            int dias_acumulado;

            int meses_atrasado;

            char situacao;

            string num_ar;

    Estanciei tudo certinho... na hora de executar o problema, ele executa, quando vou tentar grava, da erro e vai parar nesta linha... dizendo que nao consegue converter, será que é por ser um maskedtextBox? To querendo utilizar esse componente, para nao deixar o usuario colocar alguma coisa que nao seje numeros....

    se alguem puder me ajudar...

    terça-feira, 7 de junho de 2011 18:07

Respostas

  • cara, no debug, arraste a seta amarela para depois de onde ocorre o erro, e veja se ocorre com os Dias tambem!!
    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:07
  • Andy,

    O que faz o método lib.LimpaTextBoxes(GrupoDados) do evento btSalvar_Click?

    Você tem certeza que não está limpando os campos antes de setar os valores no objeto?

    Faça um teste:

    Comente as linhas:
    lib.LimpaTextBoxes(GrupoDados);
    lib.Trava(GrupoDados);

     Quanto ao banco, valor "" não é nulo, portanto não ocorre exceção.

     


    Carlos Eduardo Ferreira

     


    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:08
  • Andy, faz um teste antes fazer o insert. Cria uma variavel pra receber o valor de txtMes e exibe o valor dessa varivel com um MessageBox.Show(),

    verifica tambem se o TextBox que vc esta atribuindo para a propriedade Meses_atrasado esta correto.

    espero ter ajudado

    vlw, boa sorte



    Ricardo Soares
    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:26

Todas as Respostas

  • Andy,

    Qual é o valor de txtMes.text quando ocorre o erro?

    Você não está passando valor vazio?


    Carlos Eduardo Ferreira
    terça-feira, 7 de junho de 2011 18:14
  • falta o .ToString(); apos pegar o "text" do TextBox!!
    terça-feira, 7 de junho de 2011 18:24
  • Não estou não Carlos Eduardo... Estou colocando numeros mesmo ( 5 ou 6);

    O poblema está no txtMes.text mesmo, porque se eu colocar assim:

    inad.Meses_atrasado = 5;

    ele aceita perfeitamente!

    o erro acontece aqui mesmo:

    inad.Meses_atrasado = Convert.ToInt32(txtMes.Text);

    será que não por se tratar de um MaskedTextBox? Defini na propiedade mask desse componente como "000", quando digito 5 ou 6, será que ele não trás alguma coisa a mais e nao consegue converter? Deve ser alguma coisa assim.,..

     

    terça-feira, 7 de junho de 2011 18:25
  • Andy-Koala,

    O ideal é você usar um controle específico para entrada de número, veja um exemplo muito bom:

    http://www.codeproject.com/KB/edit/HDNumericTextBox.aspx

    Você pode tambem usar o NumericUpDown:

    http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.aspx

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 7 de junho de 2011 18:28
  • Fiz um teste com as mesmas características que você passou e não ocorreu erro.

    Quando você está debugando, qual é o valor de txtMes.Text?


    Carlos Eduardo Ferreira

    terça-feira, 7 de junho de 2011 18:30
  • inad.Meses_atrasado = Convert.ToInt32(txtMes.Text.ToString());   ??

     

     

    desculpa se estou dando uma de noob...

    terça-feira, 7 de junho de 2011 18:38
  • Fabricio, o .ToString() não é para converter para string? Já está em string...to querendo converter para Int e da dando erro....
    terça-feira, 7 de junho de 2011 18:41
  • Fabrício,

    Na verdade não há diferença entre txtMes.Text e txtMes.Text.ToString() no MaskedTextBox, a propriedade Text já é um string, então não é necessário fazer o ToString().

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 7 de junho de 2011 18:42
  • Como executo esse processo "debugar" ? Sei que dá pra ver passo a passo nao é? O que ta pegando, etc....
    terça-feira, 7 de junho de 2011 18:42
  • Fabrício,

    Não é esse o problema porque a propriedade Text já retorna string.

    Eu fiz um teste com as mesmas características e não ocorreu erro.

    Abraço,


    Carlos Eduardo Ferreira
    terça-feira, 7 de junho de 2011 18:43
  • inad.Meses_atrasado = Convert.ToInt32(txtMes.Text.ToString()); ??





    desculpa se estou dando uma de noob...

     

    Fabricio sem sucesso, o erro continua...

    terça-feira, 7 de junho de 2011 18:44
  • terça-feira, 7 de junho de 2011 18:48
  • huum, ok, desculpe.

     

    Para Debugar adicione seus BreakPoint nas linhas desejadas e compile o projeto normalmente, quando o projeto parar(breakPoint) vai precioanndo F11 para acompanhar a compilação...

    terça-feira, 7 de junho de 2011 18:51
  • Obrigado pessoal, por ensinar sobre o processo de debugação;;;;

    Então ele está trazendo o valor igual a zero....

    por isso o erro então...

    não sei porque ele está trazendo este valor, estou digitando 5 ou 6....


    terça-feira, 7 de junho de 2011 18:59
  • Andy,

    Ainda não é esse o problema, zero é numérico, você precisa ver o valor de txtMes.Text.

    Faça o seguinte:

    1. Crie o breakpoint conforme o Fabricio explicou;
    2. Rode o projeto;
    3. Quando parar no breakpoint, selecione o texto txtMes.Text, clique com o botão direito e depois clique na opção QuickWatch;

    Na nova janela será exibido o valor que precisamos saber.


    Carlos Eduardo Ferreira
    terça-feira, 7 de junho de 2011 19:11
  • Desculpe, na verdade nao é zero... na verdade é "", espaço em branco.

    Valeu

     

    terça-feira, 7 de junho de 2011 19:13
  • Ok...

    Não se esqueça de marcar como Respondida.

    Abraço, 


    Carlos Eduardo Ferreira
    terça-feira, 7 de junho de 2011 19:35
  • Entao Carlos, mais apenas resolvi uma parte do problema, rs

    não está funcionando preciso saber o porque ele está pegando "" .... eu to digitando um valor, nao sei porque ele pega "" (espaço)...

    terça-feira, 7 de junho de 2011 19:40
  • Andy,

    Você vai descobrir "debugando" até chegar nessa linha.

    Por acaso, você está limpando o campo via código antes de pegar o valor?

    Posta o seu código que fica mais fácil.

    Abraço,


    Carlos Eduardo Ferreira
    terça-feira, 7 de junho de 2011 19:49
  • Classe para gravar:

     

        public void gravaInad(inadimplentes inad)
        {
          try
          {
            ConexaoBD conexao = new ConexaoBD();
    
            conexao.Conectar();
            MySqlCommand Sql = new MySqlCommand("insert into inadimplentes (cod_usuario, nome_usuario, dt_inclusao, Dt_notificacao, dias_acumulado, meses_atraso, situacao, num_ar) values (@cod_usuario, @nome_usuario, @dt_inclusao, @dt_notificacao, @dias_acumulado, @meses_atraso, 'A', @num_ar)", conexao.cn);
            Sql.Parameters.AddWithValue("@cod_usuario", inad.Cod_usuario);
            Sql.Parameters.AddWithValue("@nome_usuario", inad.Nome_usuario);
            Sql.Parameters.AddWithValue("@dt_inclusao", inad.Dt_inclusao);
            Sql.Parameters.AddWithValue("@dt_notificacao", inad.Dt_notificacao);
            Sql.Parameters.AddWithValue("@dias_acumulado", inad.Dias_acumulado);
            Sql.Parameters.AddWithValue("@meses_atraso", inad.Meses_atrasado);
            Sql.Parameters.AddWithValue("@situacao", inad.Situacao);
            Sql.Parameters.AddWithValue("@num_ar", inad.Num_ar);
            Sql.ExecuteNonQuery();
            //.ExecuteNonQuery();
          }
          catch (MySqlException)
          {
            MessageBox.Show("erro ao tentar gravar na tabela de inadimplencia!!!");
            //throw;
          }

     A classe inadimplentes:

     

    class inadimplentes
      {
        int cod_controle;
        string cod_usuario;
        string nome_usuario;
        DateTime dt_inclusao;
        DateTime dt_notificacao;
        int dias_acumulado;
        int meses_atrasado;
        char situacao;
        string num_ar;
    
        public int Cod_controle
        {
          get { return cod_controle; }
          set { cod_controle = value; }
        }
        public string Cod_usuario
        {
          get { return cod_usuario; }
          set { cod_usuario = value; }
        }
        public string Nome_usuario
        {
          get { return nome_usuario; }
          set { nome_usuario = value; }
        }
        public DateTime Dt_inclusao
        {
          get { return dt_inclusao; }
          set { dt_inclusao = value; }
        }
        public DateTime Dt_notificacao
        {
          get { return dt_notificacao; }
          set { dt_notificacao = value; }
        }
        public int Dias_acumulado
        {
          get { return dias_acumulado; }
          set { dias_acumulado = value; }
        }
        public int Meses_atrasado
        {
          get { return meses_atrasado; }
          set { meses_atrasado = value; }
        }
        public char Situacao
        {
          get { return situacao; }
          set { situacao = value; }
        }
        public string Num_ar
        {
          get { return num_ar; }
          set { num_ar = value; }
        }
    
      }

    A parte que faz a gravação e acontece o erro:

        private void btSalvar_Click(object sender, EventArgs e)
        {
          biblioteca lib = new biblioteca();
          lib.LimpaTextBoxes(GrupoDados);
          lib.Trava(GrupoDados);
          try
          {
            ConexaoBD conexao = new ConexaoBD();
            inadimplentes inad = new inadimplentes();
            inad.Cod_usuario = txtCodigo.Text;
     //        if (txtNome.Text != "")
              inad.Nome_usuario = txtNome.Text;
     //        else
      //       {
       //        MessageBox.Show("É Obrigatorio digitar o nome do beneficiário...");
        //       txtNome.Focus();
         //    }
            inad.Dt_inclusao = DateTime.Parse(dtDtInclusao.Text);
            inad.Dt_notificacao = DateTime.Parse(dtDtNotif.Text);
            if (comboSituacao.Text == "Em processo")
            {
              inad.Situacao = 'P';
            }
            else if (comboSituacao.Text == "Fechado")
            {
              inad.Situacao = 'F';
            }
            else if (comboSituacao.Text == "Excluido")
            {
              inad.Situacao = 'E';
            }
            inad.Num_ar = txtAR.Text;
    //        if (txtMes.Text != "")
              inad.Meses_atrasado = Int32.Parse(txtMes.Text);
          //        else
    //          inad.Meses_atrasado = 0;
    //        if (txtDias.Text != "")
               inad.Dias_acumulado = Int32.Parse(txtDias.Text);
     //        else
    //          inad.Dias_acumulado = 0;
    
    
            conexao.gravaInad(inad);
          }
          catch (MySqlException erro)
          {
            MessageBox.Show("erro ao tentar gravar os dados!");
          }
        }

     É aqui que acontece o erro:

    inad.Meses_atrasado = Int32.Parse(txtMes.Text);

     observacao tamb, que o campo nome, e codigo, veem em branco, mesmo eu digitando alguma coisa.....

    o mais estranho ainda é que no mysql esses campos estão como not null, e ele ta gravando zerado mesmo sem apresentar o erro....

     

    terça-feira, 7 de junho de 2011 19:54
  • cara, no debug, arraste a seta amarela para depois de onde ocorre o erro, e veja se ocorre com os Dias tambem!!
    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:07
  • Andy,

    O que faz o método lib.LimpaTextBoxes(GrupoDados) do evento btSalvar_Click?

    Você tem certeza que não está limpando os campos antes de setar os valores no objeto?

    Faça um teste:

    Comente as linhas:
    lib.LimpaTextBoxes(GrupoDados);
    lib.Trava(GrupoDados);

     Quanto ao banco, valor "" não é nulo, portanto não ocorre exceção.

     


    Carlos Eduardo Ferreira

     


    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:08
  • Andy, faz um teste antes fazer o insert. Cria uma variavel pra receber o valor de txtMes e exibe o valor dessa varivel com um MessageBox.Show(),

    verifica tambem se o TextBox que vc esta atribuindo para a propriedade Meses_atrasado esta correto.

    espero ter ajudado

    vlw, boa sorte



    Ricardo Soares
    • Marcado como Resposta Andy-Koala quarta-feira, 8 de junho de 2011 13:33
    terça-feira, 7 de junho de 2011 20:26
  • @Andy

    No mundo da programacao este teu codigo de gravar nao funciona perfeitamente. E por isto que os valores estao em branco. Voce nao esta a alimentar a sua class correctamente. Fazer da forma que estas a fazer nao faz muito sentido.

     

    Tu esta a usar n-tier. Entao teria de ficar assim:

     

     public void gravaInad(string codigodousario, string nome, date_inclusao etct etc)
      {
       try
       {
        ConexaoBD conexao = new ConexaoBD();
    
        conexao.Conectar();
        MySqlCommand Sql = new MySqlCommand("insert into inadimplentes (cod_usuario, nome_usuario, dt_inclusao, Dt_notificacao, dias_acumulado, meses_atraso, situacao, num_ar) values (@cod_usuario, @nome_usuario, @dt_inclusao, @dt_notificacao, @dias_acumulado, @meses_atraso, 'A', @num_ar)", conexao.cn);

    aqui chamavas a tua class ---

    inadimplentes inad = new inadimplentes();

    depois fazias assim: 
     inad.Cod_usuario = codigodousario;
    bla 
    bla
    bla

    assim ja funciona
    Sql.Parameters.AddWithValue("@cod_usuario", inad.Cod_usuario); Sql.Parameters.AddWithValue("@nome_usuario", inad.Nome_usuario); Sql.Parameters.AddWithValue("@dt_inclusao", inad.Dt_inclusao); Sql.Parameters.AddWithValue("@dt_notificacao", inad.Dt_notificacao); Sql.Parameters.AddWithValue("@dias_acumulado", inad.Dias_acumulado); Sql.Parameters.AddWithValue("@meses_atraso", inad.Meses_atrasado); Sql.Parameters.AddWithValue("@situacao", inad.Situacao); Sql.Parameters.AddWithValue("@num_ar", inad.Num_ar); Sql.ExecuteNonQuery(); //.ExecuteNonQuery(); } catch (MySqlException) { MessageBox.Show("erro ao tentar gravar na tabela de inadimplencia!!!"); //throw; }

    obs: quando fores ao form fazes a validacao dos campos primeiro no textbox.

    depois alimentas assim o metodo de gravar:

        conexao.gravaInad(textbox2.text, textbox2.text bla bla bla);
    
    se tudo for verdadeiro entao gravas.


    A outra forma seria :

     public inadimplentes gravaInad(string nome, string data bala bala bala)
     {
       try
       {
        ConexaoBD conexao = new ConexaoBD();
    
        conexao.Conectar();
        MySqlCommand Sql = new MySqlCommand("insert into inadimplentes (cod_usuario, nome_usuario, dt_inclusao, Dt_notificacao, dias_acumulado, meses_atraso, situacao, num_ar) values (@cod_usuario, @nome_usuario, @dt_inclusao, @dt_notificacao, @dias_acumulado, @meses_atraso, 'A', @num_ar)", conexao.cn);

    inadimplentes gravar_Com_Sucess0 = new inadimplentes();
    gravar_Com_Sucesso.Cod_usuario = nome;

    bala bla bala

    bala bla


    Sql.Parameters.AddWithValue("@cod_usuario", inad.Cod_usuario); Sql.Parameters.AddWithValue("@nome_usuario", inad.Nome_usuario); Sql.Parameters.AddWithValue("@dt_inclusao", inad.Dt_inclusao); Sql.Parameters.AddWithValue("@dt_notificacao", inad.Dt_notificacao); Sql.Parameters.AddWithValue("@dias_acumulado", inad.Dias_acumulado); Sql.Parameters.AddWithValue("@meses_atraso", inad.Meses_atrasado); Sql.Parameters.AddWithValue("@situacao", inad.Situacao); Sql.Parameters.AddWithValue("@num_ar", inad.Num_ar); Sql.ExecuteNonQuery(); //.ExecuteNonQuery(); }








    One word frees us of all the weight and pain of life: that word is love.
    terça-feira, 7 de junho de 2011 20:50
    Moderador
  • O que faz o método lib.LimpaTextBoxes(GrupoDados) do evento btSalvar_Click?
    
    Você tem certeza que não está limpando os campos antes de setar os valores no objeto?
    
    Faça um teste:
    
    Comente as linhas:
     lib.LimpaTextBoxes(GrupoDados);
     lib.Trava(GrupoDados);

     

    Pessoal Obrigado a todos, o Carlos Eduardo tinha razão, nem percebi, estava limpando os campos antes de gravar, obrigado!!! Já... ja volto, com mais dúvidas, rs....

    quarta-feira, 8 de junho de 2011 13:33