none
Erro: O índice estava fora dos limites da matriz RRS feed

  • 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
    quinta-feira, 10 de agosto de 2017 14:07

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
    quinta-feira, 10 de agosto de 2017 14:33

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
    quinta-feira, 10 de agosto de 2017 14:33
  • Maravilha! Agora o vetor é preenchido sem erros.

    Obrigado!

    quinta-feira, 10 de agosto de 2017 15:04