Newsgroup: it.comp.lang.visual-basic
Titolo: Connessione Ado e "pensata" bislacca

Buon giorno a tutti...
ultimamente scrivo poco, ma vi leggo tanto.
E' qualche giorno che, nelle mie varie riflessioni da autobus (mentre 
viaggio non ho niente da fare), pensavo alle connessioni Ado ed al loro 
utilizzo.
Una cosa che ho sempre fatto (e sbagliando), e' quella di aprirmi una 
connessione Ado all'avvio dell'applicazione ( creando un oggetto con 
visibilita' pubblica in un modulo), tenerla in vita per tutto il tempo che 
il programma sta girando, e poi chiuderla alla fine. Orrore direte voi, ma 
finche' dovevo far girare delle applicazioni monoutente su db locali, poco 
male.
Stavo invece pensando ad un modo piu' sicuro di lavoro (apro la connessione, 
la utilizzo, la chiudo ecc...) senza stravolgere il codice e senza 
preoccuparmi troppo della dimenticanza della apertura e chiusura della 
connessione stessa.
Pensavo:
Creo una proprieta' pubblica, di sola lettura, in un modulo contenente la 
mia connessione.
Ogni volta che qualcuno accede a questa proprieta' dall'esterno, controllo 
se la connessione e' aperta e se non lo e', la apro (chiaramente la stringa 
di connessione e tutte le altre proprieta' eventualmente necessarie, le ho 
impostate all'avvio del software), restituisco la connessione e 
contemporaneamente attivo un timer che scatta ogni (ad esempio) 5 secondi.
La funzione chiamata dal timer andra' a vedere se la connessione e' aperta e 
inutilizzata (Connessione.State = 1), in questo caso la chiude e distrugge 
il timer.
Se la connessione e' aperta ma utilizzata (Connessione.State >1) non la 
chiude e non distrugge il timer, cosi' che il ciclo si ripetera'.
In questo modo, dovrei sempre essere in grado di chiudere automaticamente la 
connessione quando non utilizzata ( al massime resterebbe aperta 5 secondi 
oltre il suo utilizzo), e di aprirla appena mi serve.
Attualmente utilizzerei questa cosa in VB6 + Ado, ma credo che anche in 
VB.Net + Ado.Net sia fattibile.
Secondo voi, e' cosi' strampalata, come idea?
Ciao e grazie... Maurizio 

 Secondo voi, e' cosi' strampalata, come idea?
L'idea di chiudere una connessione con un timer non mi pare granchè, magari
te la trovi chiusa senza volerlo in parti di programma.
Io ho progetti che aprono la connessione all'avvio e la chiudono alla
chiusura. Grossi problemi non ne ha mai dati (anche in rete).
Se non erro c'è anche una proprietà ADO che gestisce il tempo di
connessione, e magari fa tutto da sola, ma non saprei proprio.

 connessione, e magari fa tutto da sola, ma non saprei proprio.
...
Controllero' !
Grazie e ciao... Maurizio 


Io temo che questa "pensata" possa essere foriera di guai...
Ti faccio un esempio di quanto potrebbe portare sfiga: supponi di aprire un 
recordset usando la tua Connessione.
Fai un loop per enumerare e processare tutti i record.
Ad un certo punto, mentre stai beatamente scorrendo i record, ti scatta il 
timer.
Purtroppo da quando è stata aperta, Connessione.State vale 1=adStateOpen 
(anche perché quella proprietà è utile e arriva ad assumere valori diversi 
da adStateClosed o adStateOpen solo aprendo la connection in modo 
asincrono), pertanto secondo la tua logica essa viene chiusa dal timer.
A questo punto ogni successivo accesso al recordset causerà un errore...
HTH
Bye
Raf

 Ti faccio un esempio di quanto potrebbe portare sfiga: [...]
...
Mmm.... mi sa che mi hai convinto.
Quasi quasi rimando la pensata nel posto da dove viene!
Ciao e grazie... Maurizio