Usuário com melhor resposta
Erro - ao converter string para inteiro.

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...
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
-
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
-
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
Todas as Respostas
-
Andy,
Qual é o valor de txtMes.text quando ocorre o erro?
Você não está passando valor vazio?
Carlos Eduardo Ferreira- Sugerido como Resposta CarlosEduardo Ferreira terça-feira, 7 de junho de 2011 19:34
-
-
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.,..
-
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) -
-
-
-
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) -
-
-
-
Andy,
Dê uma olhada nesses links:
http://www.dotnetperls.com/debugging
http://www.juliobattisti.com.br/tutoriais/mauricioborges/debug001.asp
Carlos Eduardo Ferreira -
-
-
Andy,
Ainda não é esse o problema, zero é numérico, você precisa ver o valor de txtMes.Text.
Faça o seguinte:
- Crie o breakpoint conforme o Fabricio explicou;
- Rode o projeto;
- 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 -
-
-
-
-
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....
-
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
-
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
-
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
-
@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:
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; }inad.Cod_usuario = codigodousario;
bla
bla
bla
assim ja funciona
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. -
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....