Newsgroup: it.comp.lang.visual-basic
Titolo: Aprire solo una connessione?

Ciao a tutti...
sto incominciando a spirolettare con 
vb.net
.
Sto scrivendo un gestionale che accede a SQL Server.
Mi domandavo:
a) E' meglio aprire una connessione unica (esempio all'avvio del programma) 
e poi chiuderla all'uscita del programma
oppure
b) ad ogni operazione di insert o update aprire e chiudere ogni volta una 
connessione?
Per adesso ho optato per la prima opzione e tal riguardo noto che al primo 
avvio la connessione
a sql server avviene lentamente con ritardi nel ridisegno della form.
Sarebbe possibile evitare questo fastidioso inconveniente magari con una 
progressbar?
Grazie a tuttie buone feste!
Miyomo 

 e poi chiuderla all'uscita del programma
zac
Se fai questa domanda ....è meglio ceh riparti da zero e ti rilegga
tutto il libro di .NET!
dotNet lavora disconnesso...gode nel lavorare disconnesso...brama di
essere disconnesso!
Se lo fai lavorare CONNESSO....allora butta via tutto....usa
vb6....almeno hai i recordset e non hai tutta "l'orpelleria" di
dotNet!
Faccio presente una cosa:
SQLserver in genere in ambiente produttivo starà su un PC....dedicato
a lui...o quanto meno "in parte dedicato a lui"
SQLserver gestisce le connessioni
SQLserver ...è un "server"
ipotesi di lavoro:
Mario Andrea Lucio Giovanna
tutti e 4 al lavoro...in uffici diversi...con mansioni diverse...tutti
entrano alle 9.00 ed escono alle 17.30 (beati loro!)
tutti e 4 alle 9.15 entrano nel tuo programma e lo terminano alle
16.30!
Ha senso impegnare il server e la relativa rete lan con 4 connessioni
di utenti che non utilizzeranno il programma per tutte e 8 le ore???
Se ad esempio Lucio è il magazziniere....e entra "per routine" nel
programma la mattina....e lo spegne la sera.....ma durante il giorno
usa il pc solo per un ora complessiva e le ore restanti scarica e
carica  camion...
che fai...butti via una connessione per tutto il giorno???
E se Giovanna fosse il manager che ogni tanto fra una telefonata e
l'altra chiede una stampa?
E ancora...Microsoft non regala licenze CAL....SQL server regge X
connessioni...per X+1 ...PAGHI ed acquisti licenze per client
supplementari!.
Se siamo in 7 e come prima sai che almeno 2 utilizzano il programma
poco ed in maniera discontinua...che fai acquistare 10 licenze???
(perchè vanno a pacchetti di 5!)
in sintesi....
rileggi i vari capitoli di ado.net....cerca di capire PERCHE' non ci
sono più i recordset e i cursori in dotNet (VB o C# che sia)
Valuta poi cosa conviene a te usare per programmare il tuo sw!
Saluti!

 una progressbar?
l'apertura di una connessione, anche nel caso di utilizzo di connection 
pooling, e' comunque un'operazione costosa.. proprio per questo e' stato 
implementato il connection pooling :), al di la' della sua reale 
funzionalita' in ambiente molto distribuito con richieste di connessioni 
quasi mai riciclabili a causa della differenza nella stringa di connessione, 
solitamente dovuta ovviamente alle diverse credenziali di accesso relative 
all'utente...
al di la' di cio', l'apertura di una connessione, in Ado.NET, non e' 
asincrona come puo' esserlo il recupero di righe dalla base dati 
(IAsyncResult), quindi passeresti ovviamente da uno stato = 0 ad un altro = 
100%, senza feedback intermedio... cio' a mio parere inficia l'utilizzo di 
una progress bar..
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
 
http://www.hotelsole.com
DbaMgr2k ver 0.21.1 - DbaMgr ver 0.65.1 and further SQL Tools
--------- remove DMO to reply