Array
(
)

Dúvida com Input string was not in ..

Diego Gonçalves
   - 05 mar 2013

Amigos, boa tarde.
Estou com um pequeno probelam no C#:
estou tentando converter para o tipo int um valor que vem de um datatable:
int valor = int.Parse(dt.Rows[0][4].ToString());
e me ocorre o seguinte erro: "Input string was not in a correct format.".
Imagino q alguns de vocês já tenham visto esse erro. Ele ocorre quando a aplicação tenta converter para o tipo int uma string vazia ou um valor não numérico.
OBS:
1) já usei Convert.ToInt32(dt.Rows[0][4].ToString()) e nada.
2) Esse erro acontece so quando do um publish na aplicação e coloco ela no servidor. na minha máquina, tudo funciona perfeitamente.
3) ja apliquei um refresh no IIS, mas tmb nao adiantou..

Não sei se isso teria a ver com permissão..
Alguém arrisca um palpite??

Obrigado.

Joel Rodrigues
   - 05 mar 2013

Bom, como você mesmo disse, isso ocorre quando você tenta converter um string não numérico. Então garanta que só valores numéricos sejam convertidos.

Robson Robsonalves.net
   - 06 mar 2013

Ou utilize o Int32.TryParse antes de tentar efetuar o cast.

Diego Gonçalves
   - 06 mar 2013

Então senhores,

as duas formas acima já foram tentadas. Inclusive já implementei as duas formas e testei na minha máquina e funcionou certo. mas quando a aplicação foi publicada no servidor, pintou esse problema..

é estranho pq não é um erro de ambiente, mas quando muda de ambiente o erro acontece.. rs

já olhei no log de eventos do windows, as a descrição do erro é igual ao que a aplicação emite...

Joel Rodrigues
   - 06 mar 2013

Provavelmente o problema está nos dados que estão sendo retornados. Geralmente os dados que utilizamos para testes são diferentes dos que existem em ambiente de produção.
Essa coluna deveria estar retornando um valor não numérico? Se não, o problema pode estar antes, no momento da gravação desse dados que está registrando um valor inválido na coluna.

Diego Gonçalves
   - 06 mar 2013

Não, essa coluna do excel possui somente valores numéricos.

Joel Rodrigues
   - 06 mar 2013

Pode ser o formato. São apenas números inteiros?
Coloca uma condição pra verificar isso e exibe uma mensagem pra testar que valor está sendo passado.

Diego Gonçalves
   - 06 mar 2013

sim sim, é somente inteiros.

e o lance da condição, foi feito e está retornando uma string vazia. por isso o erro acontece. mas o q mais ta me intrigando é o fato de que quando rodo o projeto local, o erro nao ocorre... o numero é exibido normalmente e a conversão é feita...

só quando publico a aplicação no servidor é que o erro acontece..

ja troquei a versão do OLEDB, mas tmb não funcionou.

ja limpei o cache do servidor e tmb não funcionou..

Joel Rodrigues
   - 06 mar 2013

É uma linha específica que dá isso ou na primeira já ocorre?

Diego Gonçalves
   - 06 mar 2013

É em uma linha específica..

a linha é essa:

int valor = int.Parse(dt.Rows[0][4].ToString());

acima dela, tem várias outras coisas, como a conexão com o excel, por exemplo e o preenchimento do datatable..

Joel Rodrigues
   - 07 mar 2013

Não, não, me refiro à linha da tabela, o registro. No primeiro registro que é lido já dá o erro?

Diego Gonçalves
   - 07 mar 2013

dá sim

Joel Rodrigues
   - 07 mar 2013

Cara, vamos começar a "apelar":
- O idioma da máquina cliente é o mesmo da sua, onde a aplicação já foi testada?