ciao a tutti, ho un problema serio che mi sta affliggendo.
in una webapp ho una dashboard che, tramite timer, si aggiorna ogni tot sec.
per aggionarsi, effettua delle query ad un db MS SQL SERVER 2016 Express e riempie delle listbox.
Capita che dopo un tot il numero di connessioni al db cresca cosi tanto da mandarmi in crash la rete del pc su cui è installata l’applicazione.
Inizialmente la connessione al db era messa prima del momento in cui effettuavo la query (if db.connect…) e chiusa (db.close) al termine del riempimento della listbox.
Poi, pensando fosse quello il problema, ho messo la connessione db alla open della session e la close alla chiusura della sessione, ma le connessioni comunque aumentano di tanto, cosa può essere?
PS è un problema che avevo già segnalato qui
ma avevo risolto riavviando il servizio ogni notte, ora invece si presenta dopo un paio di ore…
Usi il Connect solo la prima volta che starti l’app
Ogni volta che il timer esegue la query controlli se da errore (ad esempio su Mysql il codice di errore per la perdita di connessione è 2013)
Se viene riscontrato tale errore allora richiami il connect e ripeti la query
Se il timer aggiorna abbastanza spesso i dati ti evita di continuare a chiamare il connect ogni volta. Io utilizzo MySQLCommunityServer e non ho avuto questi problemi quindi non ti so dire se c’è qualche bug su MS SQL.
Molto strana come cosa… ma tutte le sessioni utilizzano lo stesso database o ogni sessione ha bisogno di accedere a un database diverso?
Se utilizzano lo stesso database puoi spostare l’inizializzazione del db nell’App e non nella Session in modo che tutti utilizzano la stessa connessione. Così facendo puoi provare a vedere se l’errore è legato ai riferimenti della sessione oppure no.
Non avendo un codice di riferimento faccio fatica ad aiutarti …
Purtroppo non so come aiutarti senza avere altre informazioni. Bisognerebbe capire come hai inizializzato le connessioni, come le usi ecc… Se nessun altro ha avuto problemi con MS SQL non penso sia un bug. Puoi provare a cercare sul feedback oppure provare a scorporare la parte del programma che non funziona in un progetto di test.
prima mi collegavo al db nei vari metodi, facevo le mie query (non faccio mai insert/update, solo select) e poi prima della fine del metodo chiudevo con db.close.
Molto probabilmente fai qualche casino con i riferimenti al database. Crea una proprietà nell’app e chiamala db o icamdb. Il tuo codice nell’evento open dell’app diventa
db = new MSSQLServerDatabase
db.host =""
...
if not db.Connect then
dai errore
end if
Mentre nel metodo CaricaOrdini quando devi lanciare la query, richiami il database così:
ps = App.db.Prepare(stringa_sql)
Ti ho risposto molto veloce, ma se non hai capito dimmelo pure che ti allego un progetto di esempio.
Hai ragione scusa, non me ne ero accorto…Visto così ora mi sembra tutto giusto… Hai provato a eseguire le query senza il prepare per vedere se è quello il problema?
Prova solo in debug ad usare la versione 2019r3.2 che utilizza ancora il web1.0 e vedi se si presenta ancora lo stesso problema. Poi valuterai se aggiornare la licenza oppure no