Criando conexões de banco de dados - Faça isso uma vez ou para cada consulta?

86

No momento, crio uma conexão de banco de dados quando minha página da Web é carregada pela primeira vez. Eu, então, processo a página e executo qualquer consulta contra essa conexão. Esta é a melhor maneira de fazer isso ou devo estar criando uma conexão de banco de dados toda vez que eu executar uma consulta?

p.s Faz mais sentido criar uma conexão e usá-la, mas não sei se isso pode causar outros problemas.

Estou usando o C # (ASP.NET) com o MSSQL.

    
por webnoob 29.03.2012 / 11:40
fonte

2 respostas

103

Se você criar um por consulta / transação, será muito mais fácil gerenciar o "fechamento" das conexões.

Eu posso ver porque o senso comum determina que você deve abrir um e usá-lo por toda parte, mas você terá problemas com conexões descartadas e multithreading. Então, o seu próximo passo será abrir uma piscina, digamos de 50 conexões, e mantê-las todas abertas, distribuindo-as para diferentes processos. E então você descobrirá que isso é exatamente o que o framework .NET faz para você já .

Se você abrir uma conexão quando precisar dela e descartá-la quando terminar, a conexão não será realmente encerrada, apenas será retornada ao pool de conexão para ser usada novamente.

    
por 29.03.2012 / 11:53
fonte
33

Prática recomendada para criar uma conexão por consulta - e, no caso de exibição de dados, a melhor prática é fazer com que a consulta forneça todos os dados necessários de uma só vez.

Informações básicas:

No .NET, chamar SqlConnection.Open() por padrão sempre usará de forma transparente pool de conexões (veja "Usando pool de conexões com o SQL Server" no MSDN. Assim, você pode simplesmente pegar uma nova conexão usando Open() e chamar Close() quando terminar, e o .NET fará a coisa certa.

Note que sem o pool de conexão, uma conexão por consulta seria uma péssima idéia porque criar conexões reais com bancos de dados pode ser muito caro (autenticação, sobrecarga de rede etc.) e o número de conexões abertas simultâneas é geralmente muito limitado. / p>     

por 29.03.2012 / 11:44
fonte