Usuário com melhor resposta
Erro: O índice estava fora dos limites da matriz

Pergunta
-
Bom dia!
Criei um método que preenche um vetor com registros de uma tabela:
public string[] preencheVetor(string tabela, int tamanhoVetor)
{
string[] vetor = new string[tamanhoVetor];
string queryString = "SELECT nome FROM "+tabela;
using (OleDbConnection connection = new OleDbConnection(strConexao()))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
for (int i = 0; i < tamanhoVetor; i++)
{
vetor[i] = reader.GetString(i); //<<< O ERRO ACONTECE AQUI
}
}
connection.Dispose();
}
return vetor;
}
O nome da tabela usada é "equipes", contém apenas o campo "nome" e possui 10 registros.
Ao chamar o método para preencher outro vetor, surge a mensagem de erro:
"O índice estava fora dos limites da matriz."
O trecho de códigos que chama o método é:
//chamo um método que retorna a qtde de registros da tebla, que são 10
int qtde = aux.verificaQtdeRegistros("equipes");
string [] equipes = new string[qtde]; //defino o tamanho do vetor
equipes = aux.preencheVetor("equipes", qtde); //chamo o método para preencher o vetor
Alguém poderia analisar os códigos acima e me ajudar a localizar e corrigir o problema?
Obrigado!
- Editado Junior_bits quinta-feira, 10 de agosto de 2017 14:09
Respostas
-
Tenta assim, tem comentários.
public string[] preencheVetor(string tabela)
{
List<string> listStr = new List<string>();
//TODO: Se o parametro tabela vier do cliente, tela por exemplo, mudar isso porque pode sofrer
//sql inject
string queryString = "SELECT nome FROM " + tabela;
using (OleDbConnection connection = new OleDbConnection(strConexao()))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
//TODO: Aqui você deve colocar o nome do campo que vc quer pegar, se por acaso o campo
//for de outro tipo, usar o tipo especifico na base, exemplo: reader.GetDecimal(reader.GetOrdinal("nome"))
listStr.Add(reader.GetString(reader.GetOrdinal("nome")));
}
connection.Dispose();
}
return listStr.ToArray();
}- Marcado como Resposta Junior_bits quinta-feira, 10 de agosto de 2017 15:03
Todas as Respostas
-
Tenta assim, tem comentários.
public string[] preencheVetor(string tabela)
{
List<string> listStr = new List<string>();
//TODO: Se o parametro tabela vier do cliente, tela por exemplo, mudar isso porque pode sofrer
//sql inject
string queryString = "SELECT nome FROM " + tabela;
using (OleDbConnection connection = new OleDbConnection(strConexao()))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
//TODO: Aqui você deve colocar o nome do campo que vc quer pegar, se por acaso o campo
//for de outro tipo, usar o tipo especifico na base, exemplo: reader.GetDecimal(reader.GetOrdinal("nome"))
listStr.Add(reader.GetString(reader.GetOrdinal("nome")));
}
connection.Dispose();
}
return listStr.ToArray();
}- Marcado como Resposta Junior_bits quinta-feira, 10 de agosto de 2017 15:03
-