Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi pessoal,
Estou com um problema aqui e ninguém da empresa conseguiu resolver.
Tenho vários projetos asp.net em um servidor e, de tempos em tempos, uma de qualquer uma dessas aplicações sofre com este mesmo problema descrito a seguir:
A aplicação conecta no banco, roda a procedure para retornar dados, joga o resultado para um "Data Table" e, quando o código chega na etapa de eu pegar o valor de uma coluna em uma variável, como:
if (MeuDataTable.Rows.Count > 0)
{
foreach (DataRow i in MeuDataTable.Rows)
{
//essa linha dá pau!!!!!
string nome = i["NOME"].ToString();
}
}
eu recebo erro na tela que minha DataTable "does not contain a property with the name 'NOME'".
O curioso é que a ele passa pelos testes "Rows.Count > 0" e entra no "foreach". Isso me diz que a conexão com o banco foi feita e que os valores são retornados.
Todas as minhas conexões com o banco de dados são feitas com Try, cath e fechadas no finally, por isso não pode ser estouro de conexões.
Se o pool da app é restartado, tudo volta a funcionar normalmente até o erro voltar a ocorrer.
Não sei mais o que testar.
Creio que não, acredito que o erro no i seja de parâmetros, você verificou se há mesmo um campo com o nome "NOME"?
Poste aqui a arquitetura desta tabela, assim fica mais fácil de ajudar.
>
Oi pessoal,
Estou com um problema aqui e ninguém da empresa conseguiu resolver.
Tenho vários projetos asp.net em um servidor e, de tempos em tempos, uma de qualquer uma dessas aplicações sofre com este mesmo problema descrito a seguir:
A aplicação conecta no banco, roda a procedure para retornar dados, joga o resultado para um "Data Table" e, quando o código chega na etapa de eu pegar o valor de uma coluna em uma variável, como:
if (MeuDataTable.Rows.Count > 0)
{
foreach (DataRow i in MeuDataTable.Rows)
{
//essa linha dá pau!!!!!
string nome = i["NOME"].ToString();
}
}
eu recebo erro na tela que minha DataTable "does not contain a property with the name 'NOME'".
O curioso é que a ele passa pelos testes "Rows.Count > 0" e entra no "foreach". Isso me diz que a conexão com o banco foi feita e que os valores são retornados.
Todas as minhas conexões com o banco de dados são feitas com Try, cath e fechadas no finally, por isso não pode ser estouro de conexões.
Se o pool da app é restartado, tudo volta a funcionar normalmente até o erro voltar a ocorrer.
Não sei mais o que testar.
Cara, eu estava com um problema aqui como o seu. Fiz um teste "sem noção" aqui, e, deu certo. Mudei apenas o tipo da atribuição:
//essa linha dá pau!!!!!
//string nome = i["NOME"].ToString();
string nome = i["NOME"].Text;
Não sei se funcionaria na sua aplicação, pois comigo foi em WinForm. Mas vale a tentativa.
Obrigado pelas respostas.
Por partes:
quintelab, eu comecei usando o DataReader, mas fui aconselhado pelos mais experientes na linguagem a usar o DataTable.
KhaosDoctor, NOME eu dei como exemplo. Esse erro acontece em diversas partes de diversas aplicações, e sempre o campo existe na tabela, tanto que quando o pool restarta a aplicação volta a funcionar novamente.
Dagmar Cirino, o erro não acontece apenas com strings, mas sim com ints ou qualquer outro tipo.
Agradeço as colaborações.
Use indexes ao invés de nomes, veja se dá certo.
Se mesmo assim não funcionar, tente substituir a DT pelo DataSet.
Não tem lógica nenhuma usar datatable somente para leitura de dados.
Abraços...
Qual a razão de usar DataTable? O erro é estranho, mas se for só leitura, neste caso eu trocaria para DataReader.
Abraços...