Erro de índice fora do intervalo

.NET

04/04/2013

Fiz esse código e dá o erro de índice fora do intervalo

SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
tbl_Triagem ramo = new tbl_Triagem();
ramo.id_recurso = Int16.Parse(reader[0].ToString());
ramo.dt_cadastro = Convert.ToDateTime(reader[1].ToString());
ramo.cpf_autor = reader[2].ToString();
ramo.nm_autor = reader[3].ToString();
ramo.num_doc = reader[4].ToString();
sequencia.Add(ramo);
}
grid.Columns[0].HeaderText = "ID Recurso";==>> Erro dá aqui(no começo da lista)
grid.Columns[1].HeaderText = "Data de Triagem";
grid.Columns[2].HeaderText = "CPF/CNPJ Autor";
grid.Columns[3].HeaderText = "Nome do Autor";
grid.Columns[4].HeaderText = "Num. Documento";
grid.DataSource = sequencia;
grid.DataBind();

O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção.
Nome do parâmetro: index
Pjava

Pjava

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

04/04/2013

Simples, você está tentando acessar uma coluna que não existe.
GOSTEI 0
Frederico Filho

Frederico Filho

04/04/2013

Quando vc estiver deguando..coloque um breakpoint na primeira linha onde vc usa a variavel reader.
Inspecione no Watch e vj quantos itens vc tem no reader...

Tenha a certeza de acessar o indice que contenha registro..

Qlq coisa..se os dados variarem de consulta pra consulta..vc pode fazer um if..pra consultar se tem item no indice em questao antes de acessar o dado.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

04/04/2013

Vou até arriscar um palpite. Esse gridview não tem colunas e você esta tentando cria-las dinamicamente. Se for isso, acompanhe seu outro tópico sobre o erro no método add.
GOSTEI 0
Valter Furtado

Valter Furtado

04/04/2013

Simples... tá dando ToString() num campo NULL... checa antes ...

tbl_Triagem ramo = null;
while (reader.Read())
{
ramo = new tbl_Triagem();
ramo.id_recurso = reader[0] != DbNull.Value ? Int16.Parse(reader[0].ToString()) : 0;
ramo.dt_cadastro = reader[1] != DbNull.Value ? Convert.ToDateTime(reader[1].ToString()) : DateTime.Today;
ramo.cpf_autor = reader[2] != DbNull.Value ? reader[2].ToString() : "";
ramo.nm_autor = reader[3] != DbNull.Value ? reader[3].ToString() : "";
ramo.num_doc = reader[4] != DbNull.Value ? reader[4].ToString() : "";
sequencia.Add(ramo);
}
GOSTEI 0
Pjava

Pjava

04/04/2013

Dados existe, mas não consigo renomear as colunas. Tem como fazer isso em Design Time?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

04/04/2013

Cara, olhando melhor seu código... experimenta renomear as colunas depois do DataBind, pois aí as colunas já terão sido geradas.
GOSTEI 0
Pjava

Pjava

04/04/2013

Quando postei esse tópico eu fiz dessa forma, mas agora está depois do DataBind(). Peguei uma ajuda sua q deu a um colega, mas não me lembro o link e cheguei a conclusão abaixo. Lá vc fala para trazer no select os nomes corretos, mas em caso de tabela muito grande isso é improdutivo e sujeito a erros. Abaixo minha nova dúvida:

Bem, achei melhor criar em Design Time os nomes da coluna. Então fui em Edit Column do grid e autogeratecolumn eu coloquei em false e acrescentei alguns BoundField. Bem agora eu preciso atribuir cada coluna criada a um campo da tabela que no meu caso eu tenho uma lista vinda do BD, já que uso Linq para isso. Como eu atribuo cada coluna dessa criada a um item da lista?
GOSTEI 0
Stephanie

Stephanie

04/04/2013


Não consigo arrumar o meu tb olhem: (na parte de inserir, tenho um gerador para o codCliente)

package br.com.lab.dao;

import java.sql.Connection;


import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.com.lab.beans.Cliente;
import br.com.lab.util.DbUtil;

public class DAOCliente {
private static final String EXCLUIR_CLIENTE = "delete from cliente where codCliente = ?";

private static final String INSERIR_CLIENTE = "insert into TBCliente(nome, dataNascimento,sexo ,rg, cpf, estadoCivil, cep, rua, numero, bairro, cidade," +
" uf, telefone, celular, email, observacao) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

private static final String ATUALIZAR_CLIENTE = "update cliente set "
+ "nome = ?," + "dataNascimento = ?," + "sexo = ?," + "rg = ?," + "cpf = ?,"
+ "estadoCivil = ?," + "cep = ?," + "rua = ?," + "numero = ?,"
+ "bairro = ?," + "cidade = ?," + "uf =?," + "telefone =?," + "celular = ?,"
+ "email = ?," + "observacao = ?," + "where codCliente = ?";

private static final String CONSULTA_CLIENTE = "select * from cliente order by nome";

public List<Cliente> consultarCLIENTES() {
Connection conn = DbUtil.getConnection();
PreparedStatement statement = null;
ResultSet result = null;
List<Cliente> listaCliente = new ArrayList<Cliente>();
try {
statement = conn.prepareStatement(CONSULTA_CLIENTE);
result = statement.executeQuery();
while (result.next()) {
Cliente objCliente = new Cliente();
objCliente.setCodCliente((result.getInt(1)));
objCliente.setNome(result.getString(2));
objCliente.setDataNascimento(result.getString(3));
objCliente.setSexo(result.getString(4));
objCliente.setRg(String.valueOf(result.getInt(5)));
objCliente.setCpf(result.getString(6));
objCliente.setEstadoCivil(result.getString(7));
objCliente.setCep(result.getString(8));
objCliente.setRua(String.valueOf(result.getInt(9)));
objCliente.setNumero(result.getString(10));
objCliente.setBairro(result.getString(11));
objCliente.setCidade(result.getString(12));
objCliente.setUf(String.valueOf(result.getInt(13)));
objCliente.setTelefone(result.getString(14));
objCliente.setCelular(result.getString(15));
objCliente.setEmail(result.getString(16));
objCliente.setObservacao(result.getString(17));

listaCliente.add(objCliente);

}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn, statement, result);
}
return listaCliente;
}

private int getNewKey() {
Connection conn = DbUtil.getConnection();
ResultSet result = null;
Statement stmt = null;
int cod = -1;
try {
stmt = conn.createStatement();
result = stmt.executeQuery("SELECT MAX(codCliente) AS COD FROM TBCliente");
while(result.next()) {
cod = result.getInt("COD") + 1;
return cod;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn, stmt, result);
}
return cod;
}

public boolean inserir(Cliente cliente) {
Connection conn = DbUtil.getConnection();
PreparedStatement statement = null;
ResultSet result = null;
try {
int cod = getNewKey();
statement = conn.prepareStatement(INSERIR_CLIENTE);
statement.setInt(1, cod);
statement.setString(2, cliente.getNome());
statement.setString(3, cliente.getDataNascimento());
statement.setString(4, cliente.getSexo());
statement.setString(5, cliente.getRg());
statement.setString(6, cliente.getCpf());
statement.setString(7, cliente.getEstadoCivil());
statement.setString(8, cliente.getCep());
statement.setString(9, cliente.getRua());
statement.setString(10, cliente.getNumero());
statement.setString(11, cliente.getBairro());
statement.setString(12, cliente.getCidade());
statement.setString(13, cliente.getUf());
statement.setString(14, cliente.getTelefone());
statement.setString(15, cliente.getCelular());
statement.setString(16, cliente.getEmail());
statement.setString(17, cliente.getObservacao());
int rowAff = statement.executeUpdate();

if (rowAff > 0) {
cliente.setCodCliente((cod));
return true;
} else {
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn, statement, result);
}
return false;
}

public boolean alterar(Cliente cliente) {
Connection conn = DbUtil.getConnection();
PreparedStatement statement = null;
ResultSet result = null;
try {
statement = conn.prepareStatement(ATUALIZAR_CLIENTE);
statement.setString(1, cliente.getNome());
statement.setString(2, cliente.getDataNascimento());
statement.setString(3, cliente.getSexo());
statement.setString(4, cliente.getRg());
statement.setString(5, cliente.getCpf());
statement.setString(6, cliente.getEstadoCivil());
statement.setString(7, cliente.getCep());
statement.setString(8, cliente.getRua());
statement.setString(9, cliente.getNumero());
statement.setString(10, cliente.getBairro());
statement.setString(11, cliente.getCidade());
statement.setString(12, cliente.getUf());
statement.setString(13, cliente.getTelefone());
statement.setString(14, cliente.getCelular());
statement.setString(15, cliente.getEmail());
statement.setString(16, cliente.getObservacao());
statement.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn, statement, result);
}
return true;
}

public boolean remover(Cliente cliente) {
Connection conn = DbUtil.getConnection();
PreparedStatement statement = null;
ResultSet result = null;
try {
statement = conn.prepareStatement(EXCLUIR_CLIENTE);
statement.setInt(1, cliente.getCodCliente());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn, statement, result);
}
return true;
}

}
GOSTEI 0
Stephanie

Stephanie

04/04/2013

ele diz: O índice 17 está fora do intervalo.
GOSTEI 0
POSTAR