Ask Learn
Preview
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Use try-finally para resolver seu problema de “The timeout period elapsed prior to obtaining a connection from the pool”.
Já comentei nos artigos anteriores sobre as construções:
Dessa vez vou falar quando usar o try-finally.
Criei um programa que executa uma Stored Procedure no SQL Server. A versão é bastante simplificada, mas ela tem um erro grave. Procure o problema no código abaixo.
Observe que, apesar do erro, o código funciona normalmente.
Encontrou o trecho incorreto?
Quando codificamos, sempre pensamos no “caminho feliz”, quando tudo dá certo. Entretanto, é possível que determinados comandos falhem. Por exemplo, o método cmd.ExecuteNonQuery pode gerar exceções por diversos motivos: comando inexistente, acesso negado, timeout.
Se houver uma SqlException durante a execução desse comando, a conexão não será fechada. Isso significa que a conexão aberta pelo método conn.Open não será encerrada por conn.Close.
Repetimos essa operação 100 vezes e temos a seguinte mensagem:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Esse erro não é novo. Já havia comentado antes:
A forma correta de escrever esse código seria:
Um atalho seria usar a sintaxe using:
Nesse caso, o método Dispose é automaticamente chamado e fecha a conexão correspondente.
Se você recebeu o erro “Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached”, então a causa mais provável é que esqueceu de fazer o Dispose do objeto SqlConnection.
Note que eu poderia ter usado try-finally ou using para o objeto SqlCommand. Por que usar ou não usar? Deixarei isso para um próximo artigo.
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign in