Pergunta

Eu tive uma suspeita de que uma conexão de banco de dados usado em um de nossos aplicativos não está sempre fechada. Fui ver o código e eu encontrei um DataProvider classe que tem objeto SqlConnection. A conexão é aberta no construtor dessa classe e fechado em seu método Dispose (não julgue isso, eu sei manter uma conexão aberta é mau, não é apenas o meu código e não é o ponto da questão de qualquer maneira). O método Dispose é implementado como esta:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_conn != null)
                _conn.Close();
        }

        _disposed = true;
    }
}

A questão é:
Será que sempre garantir que a conexão é fechada?
É este o direito código?

Eu acho que deveria haver _conn.Dispose() chamado - estou certo e poderia não afetar fechar a conexão (provavelmente não)

?
Foi útil?

Solução

Elimine nunca é chamado automaticamente.

A conexão não será fechado até que o método Dispose de seu objeto é explicitamente chamado, ou se a sua classe em usado em um usando () bloco

A mais seguro caminho é chamar o método dispose no seu finalizador e garantir o finalizador é suprimida quando o Dispose método é chamado.

Este artigo apresentar a maneira correta de implementar o padrão

Espero que ajude!

Cédric

Outras dicas

conn.Dispose(); irá também fechar a conexão, por isso não pode ferir alterá-lo para seguir o padrão dispor.

Mas há funcionalmente equivalente, então deve haver um problema mais onde.

http://msdn.microsoft .com / en-us / library / system.data.sqlclient.sqlconnection.close.aspx

Se o SqlConnection sai de âmbito, não vai ser fechado. Portanto, você deve fechar explicitamente a conexão chamando Close ou Descarte. Feche e Descarte são funcionalmente equivalente. Se o conexão valor agrupamento de comparticipação é definido como verdadeiro ou sim, o subjacente conexão é devolvido de volta para o pool de conexão. Por outro lado, se Pooling é definida como falsa ou não, o conexão subjacente ao servidor é fechada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top