none
Como converter o valor do maskedTextBox em Inteiro INT C# RRS feed

  • Pergunta

  • Boa Tarde;

    Estou fazendo uma conexão com o banco de dados mysql;

    Só que estou com problema no maskedTextBox, não consigo transformar o valor dele para inteiro, e em um dos maskedTextBox, preciso transformar o valor dele em Date... quando executo o programa aparece o seguinte erro:

    "FormatException ocorreu" apenas nos MaskedTextBox pois nos textbox ele aceita os comando normalmente. Alguém pode me ajudar.

    Abaixo está o meu codigo:

     //instancia do banco
                using (cadastro_projetoEntities ctx = new cadastro_projetoEntities())
                {
                    //instancia do objeto tabela Paciente
                    paciente objTabPaciente = new paciente();
    
                    //setar os campos da tabela Paciente
                    objTabPaciente.Nome_Paciente = textBox_Nome.Text;
                   
     //Não reconhece o Convert que eu inserir para converter em inteiro
    objTabPaciente.CPF =Int32(maskedTextBox_CPF.Text);
    
     //Não reconhece o Convert que eu inserir para converter em inteiro
                    objTabPaciente.RG = Convert.ToInt32(maskedTextBox_RG.Text);
    
     //Não reconhece o Convert que eu inserir para converter em DATE 
                    objTabPaciente.Dt_Nascimento = Convert.ToDateTime(maskedTextBox_Nasci.Text);
                  
      objTabPaciente.CEP=Convert.ToInt32(maskedTextBox_CEP.Text);
                    objTabPaciente.Endereco = textBox_Endereco.Text;
                    objTabPaciente.Numero_Casa = textBox_Num_casa.Text;
                    objTabPaciente.Bairro = textBox_Bairro.Text;
                    objTabPaciente.Telefone = Convert.ToInt32(maskedTextBox_Telefone.Text);
                    objTabPaciente.Celular = Convert.ToInt32(maskedTextBox_Celular.Text);
                    objTabPaciente.Estado = textBox_Estado.Text;
                    objTabPaciente.Cidade = textBox_Cidade.Text;
                    objTabPaciente.Email = textBox_Email.Text;
    
                    ctx.paciente.Add(objTabPaciente);
    
                    ctx.SaveChanges();
    
                    MessageBox.Show("Usuario Cadastrado com Sucesso!");
                }
            }

    E assim por diante...todos os masked não são reconhecidos. Alguem pode me ajudar a converter em inteiro e data esses masked.



    sexta-feira, 1 de julho de 2016 19:32

Respostas

  • Bom dia,

    Obrigado, será sempre um prazer.

    Como no banco você deixou como INT, em c# você precisa converter para INT64.
    Então você remove a máscara do campo e converte. Ex:

    Regex regex = new Regex(@"[^\d]");
    objTabPaciente.CPF = Convert.ToInt64(regex.Replace(maskedTextBox1.Text, ""));

    É importante ressaltar que o atributo "CPF" da classe "paciente" precisa ser alterado para "int64" também. Essa é a desvantagem em tratar campos longos como "int", nessa ocasião prefiro trabalhar com "string" ou seja no banco deixaria como varchar. Mas isso não é incorreto, vai de cada desenvolvedor.

    Espero ter ajudo, qualquer coisa estou a disposição.

    Att,



    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Thales F Quintas segunda-feira, 4 de julho de 2016 13:21
    segunda-feira, 4 de julho de 2016 11:50

Todas as Respostas

  • Boa tarde,

    Andressa, remova a mascara do campo antes de converter. Você pode utilizar Regex para remover os caracteres, deixando apenas números:

    Regex regex = new Regex(@"[^\d]");
    objTabPaciente.CPF = Convert.ToInt32(regex.Replace(maskedTextBox1.Text, ""));

    Andressa, uma opção seria você definir os atributos CPF e RG como "string" texto. Pois os campos int, double, decimal, etc. possui limites de "caracteres" tamanho. Por esse motivo ao tentar converter o CPF para int vai dar erro.

    Limites:
    http://www.dotnetperls.com/int-maxvalue

    Espero ter ajudado!

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney sexta-feira, 1 de julho de 2016 19:50
    sexta-feira, 1 de julho de 2016 19:50
  • Olá Silvaney, bom revê-lo hehe,

    Quando vc fala definir os campos para strings eu devo fazer isso em c# ou no banco de dados mysql?

    fiz o codigo que vc mostrou mas agora aparece outro erro:

    "overflowexception não foi manipulada"



    • Editado Andressa.s sexta-feira, 1 de julho de 2016 21:04
    sexta-feira, 1 de julho de 2016 20:30
  • Veja se esta classe te ajuda esta classe http://www.codigoexpresso.com.br/Home/Postagem/28


    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    segunda-feira, 4 de julho de 2016 00:39
  • Bom dia,

    Obrigado, será sempre um prazer.

    Como no banco você deixou como INT, em c# você precisa converter para INT64.
    Então você remove a máscara do campo e converte. Ex:

    Regex regex = new Regex(@"[^\d]");
    objTabPaciente.CPF = Convert.ToInt64(regex.Replace(maskedTextBox1.Text, ""));

    É importante ressaltar que o atributo "CPF" da classe "paciente" precisa ser alterado para "int64" também. Essa é a desvantagem em tratar campos longos como "int", nessa ocasião prefiro trabalhar com "string" ou seja no banco deixaria como varchar. Mas isso não é incorreto, vai de cada desenvolvedor.

    Espero ter ajudo, qualquer coisa estou a disposição.

    Att,



    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Thales F Quintas segunda-feira, 4 de julho de 2016 13:21
    segunda-feira, 4 de julho de 2016 11:50
  • Boa Noite;

    Então  obrigada eu resolvi mudar os campo que estavam em int para string e mudei os campos do banco de dados para  varchar, pois estava dando mto conflito com esses maskedTextBox....Mas me ajudou mto a dica de  vcs, obrigada.

    Desculpa a demora pra responder, eu dei uma pausa nesse projeto para iniciar outro, agora retomei esse.

    Obrigada de verdade!

    • Sugerido como Resposta Dalton Espindola quarta-feira, 14 de fevereiro de 2018 23:05
    • Não Sugerido como Resposta Dalton Espindola quarta-feira, 14 de fevereiro de 2018 23:05
    terça-feira, 27 de setembro de 2016 22:53