Inquiridor
Conexao aberta

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 ?
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
-
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
-
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 -
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?