reznor Posted September 2, 2014 Report Share Posted September 2, 2014 Bom dia! Hoje estava a trabalhar numa aplicação que estou a desenvolver e apareceu-me isto: Já não é a primeira vez que me aparece mas das outras vezes não se manteve como se está a manter agora! Alguem me consegue dar umas luzes acerca do que se está a passar e como tentar resolver? Essa função "Notificacoes()" está associada a um timer que a cada X tempo faz o count à BD para verificar a existencia de novos registos! Obrigado desde já Link to comment Share on other sites More sharing options...
herty Posted September 2, 2014 Report Share Posted September 2, 2014 Porque não fazes o cn.Open(); logo a seguir ao SqlConnection? Link to comment Share on other sites More sharing options...
nelsonr Posted September 2, 2014 Report Share Posted September 2, 2014 (edited) Boas, define a ligação com o using, de modo a certificar que faz o dispose quando não precisar. Uii isso de erros em portugues 😄 Julgo que ligações em conjunto seja connection pool (?). Na connection string tambem podes definir um valor maior usando por exemplo Max Pool Size=200 Edited September 2, 2014 by nelsonr Link to comment Share on other sites More sharing options...
reznor Posted September 2, 2014 Author Report Share Posted September 2, 2014 Porque não fazes o cn.Open(); logo a seguir ao SqlConnection? Já o estou a fazer e o problema mantem-se :\ Boas, define a ligação com o using, de modo a certificar que faz o dispose quando não precisar. Uii isso de erros em portugues 😄 Julgo que ligações em conjunto seja connection pool (?). Na connection string tambem podes definir um valor maior usando por exemplo Max Pool Size=200 Eu creio que o erro é por estar a associar a função ao timer,porque retirei de lá e já funciona, coloquei no form_load e da correcto. A questão é que queria que ficasse no timer para estar sempre a atualizar :\ Link to comment Share on other sites More sharing options...
snake8856 Posted September 2, 2014 Report Share Posted September 2, 2014 Boas, Só uma pergunta, estás a usar o close() da ligação no fim? Não poderá ser por existir demasiadas ligações abertas ao mesmo tempo? Link to comment Share on other sites More sharing options...
reznor Posted September 2, 2014 Author Report Share Posted September 2, 2014 (edited) Boas, Só uma pergunta, estás a usar o close() da ligação no fim? Não poderá ser por existir demasiadas ligações abertas ao mesmo tempo? Estou sim: private void Notificacoes() { string hoje = DateTime.Now.ToString("yyyy/MM/dd"); string constring = Classe_Ligacao.cn; SqlConnection cn = new SqlConnection(constring); /*Ligação à base de dados*/ cn.Open(); SqlCommand cmdCount = new SqlCommand("SELECT count(*) from Pedio WHERE Estado ='Pendente'", cn); SqlCommand cmdCountPHALT = new SqlCommand("SELECT count(*) from CopiaPH WHERE DataAlter = '" + hoje + "' AND Razao !=''", cn); SqlCommand cmdCountDil = new SqlCommand("SELECT count(*) from CopiaDili WHERE DataAlter = '" + hoje + "' AND Razao !='' ", cn); int count = (int)cmdCount.ExecuteScalar(); if (count > 0) { toolStripButton4.ForeColor = Color.Red; toolStripButton4.Text = count.ToString() + " " + toolStripButton4.Text; toolStripButton4.ToolTipText = "Existem " + (count.ToString() + " novas requisições de PED!"); } int countPHALT = (int)cmdCountPHALT.ExecuteScalar(); if (countPHALT > 0) { toolStripButton5.ForeColor = Color.Red; toolStripButton5.Text = countPHALT.ToString() + " " + toolStripButton5.Text; toolStripButton5.ToolTipText = "Existem " + (countPHALT.ToString() + " Alterações de Ped!"); } int countDil = (int)cmdCountDil.ExecuteScalar(); if (countDil > 0) { toolStripButton6.ForeColor = Color.Red; toolStripButton6.Text = countDil.ToString() + " " + toolStripButton6.Text; toolStripButton6.ToolTipText = "Existem " + (countDil.ToString() + " novas alterações em Dilig!"); } else { return; } cn.Close(); } Edited September 2, 2014 by reznor Link to comment Share on other sites More sharing options...
snake8856 Posted September 2, 2014 Report Share Posted September 2, 2014 (edited) Obrigado, pelo que estou a ver a ligação pode não estar a ser fechada. Se o coutDil retornar 0, estás a fazer return sem fechar a ligação. Junta todos os ExecuteScalar no mesmo grupo e fecha a ligação, i.e, int count = (int)cmdCount.ExecuteScalar(); int countPHALT = (int)cmdCountPHALT.ExecuteScalar(); int countDil = (int)cmdCountDil.ExecuteScalar(); cn.Close(); if(count>0)... ou então tira o return; Edited September 2, 2014 by snake8856 Link to comment Share on other sites More sharing options...
nelsonr Posted September 2, 2014 Report Share Posted September 2, 2014 Volto a sugerir para definires a ligação com o using Link to comment Share on other sites More sharing options...
hugorodrigues Posted September 2, 2014 Report Share Posted September 2, 2014 Boas, Tenta fazer como o nelsonr disse usando o using ou então depois de fazer cn.close(); faz também cn.dispose(); Because being normal isn't funny Link to comment Share on other sites More sharing options...
reznor Posted September 4, 2014 Author Report Share Posted September 4, 2014 Boas caros! Segui a sugestão do Nelson e já funciona! using (SqlConnection cn = new SqlConnection(constring)) Obrigado a todos! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now