Timeout Expired ( troppe connessioni attive )

giovedì 08 marzo 2007 - 13.01

biggiu Profilo | Junior Member

Salve a tutti,

ho il seguente problema :

Ho realizzato una procedura in VB.Net con l'aggancio a due Db : uno e' Microsoft SQL e l'atro e MySql.

Per acluni problemi legati alla compatibilita' tra date, per eseguire la lettura delle tabelle MySql ho adottato la seguente funzione :

'-----------------------------------'
' GETROWMSQ Lettura anagrafica MySQl'
'-----------------------------------'

Function GetRowMsq(ByVal cmdsql As String)
Dim nroRecord As Integer
Dim myStrConn As String

MsqCmd = New MySqlCommand()

Try
'----- creazione esplicita della connessione
myConnection = New MySqlConnection()
myStrConn = StrCon
myConnection.ConnectionString = myStrConn
myConnection.Open()
'----- passaggio della connessione attiva all'oggetto Command
MsqCmd.Connection = myConnection

'----- definizione del tipo di comando
MsqCmd.CommandType = CommandType.Text

'----- assegnazione della stringa comando
MsqCmd.CommandText = cmdsql

'----- esegue il comando di lettura
GetRowMsq = MsqCmd.ExecuteReader

'----- si chiude la connessione
Catch thisExcept As Exception
'----- se il tentativo di connessione fallisce visualizza l'eccezione
MessageBox.Show(thisExcept.Message, "GetRowMsq")
End Try

End Function

eseguita la lettura e caricate le informazioni desiderate eseguo la funzione successiva :

Sub MsqClsCon()
'----- Chiusura connessione MySQL
myConnection.Close()
MsqDatRea.Close()
MsqCmd.Connection.Close()
End Sub

che dovrebbe chiudere la connessione al DB MySql.

Purtroppo credo di aver dimenticato qualcosa perche' dopo aver inserito 84 articoli di magazzino, all'interno del corpo di un documento, ottengo il seguente messaggio di errore :

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. this may have occurred because all pooled connections where in use and max pool size was reached.

Ho anche provato, di volta in volta, ad escludere funzioni che eseguissero operazioni sul DB MySql, ma il messaggio compare sempre, generalmente legato alla funzione sopra illustrata (GetRowMsq).

Qualcuno sa darmi qualche dritta ?

Grazie per la gentile collaborazione.

Buon Lavoro a tutti
BigGiu

Brainkiller Profilo | Guru

>Purtroppo credo di aver dimenticato qualcosa perche' dopo aver
>inserito 84 articoli di magazzino, all'interno del corpo di un
>documento, ottengo il seguente messaggio di errore :
>Timeout expired. The timeout period elapsed prior to obtaining
>a connection from the pool. this may have occurred because all
>pooled connections where in use and max pool size was reached.

Ciao,
Scusa ma se ti va in errore per esempio la ExecuteReader(), scatta il catch e la connessione dove la chiudi ?
Gli 84 articoli che inserisci vengono inseriti tutti senza errore (ossia senza che il codice passi dal catch) ?

Oppure usa la keyword using in questo modo se usi C#:

using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Do work here; connection closed on following line. }

Questo garantisce che le connessioni vengano automaticamente chiuse alla fine dello scope.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

biggiu Profilo | Junior Member

Ciao,
grazie per l'interessamento.

Si, carico gli articoli senza che avvenga nessun errore.

Quello che mi fai notare sulla ExecuteReader e' corretto, ma purtroppo non e' questo il problema.

Mi spiace ma non uso C ma visual basic, se puoi fornirmi un esempio con questo codice te ne sarei grato.

Ciao e Buon Lavoro


BigGiu

Brainkiller Profilo | Guru

>Quello che mi fai notare sulla ExecuteReader e' corretto, ma
>purtroppo non e' questo il problema.

Io purtroppo non vedo nel tuo codice dove chiami la funzione di chiusura della connessione. Io ti consiglio di fare un debug step by step simulando degli errori nel try...catch e facendo un percorso classico senza errori, e verificare se effettivamente le connessioni così come vengono aperte vengono anche chiuse.

>Mi spiace ma non uso C ma visual basic, se puoi fornirmi un esempio
>con questo codice te ne sarei grato.

Purtroppo con lo using non credo ci sia un corrispettivo in VB.NET quindi bisogna aprire e chiudere in modo tradizionale.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

biggiu Profilo | Junior Member

Ciao

dopo che ho eseguito la connessione

eseguo la funzione :

Sub MsqClsCon()

Le funzioni che ho presentato sono pubbliche e quindi le richiamo di volta in volta dove le ritengo necessarie.

Ho fatto il test che dici tu e sembra che ad ogni apertura, corrisponda la relativa chiusura
MsqClsCon

Grazie comunque per il tempo dedicatomi.



BigGiu

Brainkiller Profilo | Guru

>Le funzioni che ho presentato sono pubbliche e quindi le richiamo
>di volta in volta dove le ritengo necessarie.
>Ho fatto il test che dici tu e sembra che ad ogni apertura, corrisponda
>la relativa chiusura
>MsqClsCon

Io ripeto, ti consiglio ad ogni apertura di stampare tramite Console.WriteLine, "APERTA CONNESSIONE" e ad ogni chiusura "CHIUSURA CONNESSIONE" e poi fare dei test di inserimento continui e vedere se a termine esecuzione le aperture come numero sono uguali alle chiusure.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

biggiu Profilo | Junior Member

Ciao,

ho rieseguito il test delle funzioni richiamate ad ogni inserimento di articolo...

mi era sfuggito un passaggio, quindi eseguivo la connessione ma poi non la richiudevo.

Sei stato di grande aiuto anche perche' in casi come questi e' sempre bene avere qualcuno con cui scambiare opinioni !

A buon rendere ( se sara' possibile )

Grazie e Buon Lavoro.

BigGiu

Brainkiller Profilo | Guru

>Sei stato di grande aiuto anche perche' in casi come questi e'
>sempre bene avere qualcuno con cui scambiare opinioni !
>A buon rendere ( se sara' possibile )
>Grazie e Buon Lavoro.

Ok anche a te ciao.
Accetta la risposta con l'apposito link se ti è stata d'aiuto.
CIao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5