none
Conexao aberta RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma classe chamada DB.cs e nela tenho o seguinte metodo:

    public List<T> ExecuteList<T>()
            {
                SqlDataReader reader = null;
                List<T> retornoLista = new List<T>();

                try
                {
                    this.Open(); //Aqui o this chama o metodo convencional Connection.Open()
                    reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                    while (reader.Read())
                    {
                        retornoLista.Add((T)Activator.CreateInstance(typeof(T), reader));
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                    throw new Exception(ex.InnerException.Message);
                }
                finally
                {
                    this.Close(); //Aqui o this chama o metodo convencional Connection.Close()
                }
                return retornoLista;
            }

    Este metodo executa um datareader e popula uma lista que sera retornada para quem chamou este metodo.
    Acontece que a conexao nao esta sendo fechada apos a populacao da lista.

    Onde esta o erro ? Poderiam me ajudar ?

    segunda-feira, 4 de junho de 2012 05:59

Todas as Respostas

  • Acrescente depois do while o reader.Close();

    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Sugerido como Resposta EduardoPiresMVP terça-feira, 5 de junho de 2012 01:22
    segunda-feira, 4 de junho de 2012 12:16
    Moderador
  • Primeiro remova o seu catch, você não está tratando erro ali.E do jeito que está, se não existir innerexception, vc vai levar outro erro ali.

    catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                    throw new Exception(ex.InnerException.Message);
                }

    Segundo como você sabe que a conexão não fechou?

    Lembre-se que por default o .net utiliza pool de conexões.


    Quem sabe um dia os DataSets se extinguirão?

    • Sugerido como Resposta EduardoPiresMVP terça-feira, 5 de junho de 2012 01:22
    segunda-feira, 4 de junho de 2012 15:04
  • Nao entendi, so removo o catch ?!? Mas eo try e finally ?

    Sei que a conexao nao esta fechado pois no load test que faco, qdo o sistema roda ele retorna a excessao: 
    Exception Details: System.Exception: The connection was not closed. The connection's current state is connecting

    sexta-feira, 8 de junho de 2012 01:41
  • Você vai ter que investigar este método aqui.

    this.Close();

    E verificar se o método esta mesmo fechando a conexão.

    Quanto ao Try Catch, leia esse post que você vai entender o problema com o seu código.

    http://blog.lambda3.com.br/2009/09/como-tratar-erros/


    Quem sabe um dia os DataSets se extinguirão?

    segunda-feira, 11 de junho de 2012 22:45