Newsgroup: it.comp.lang.visual-basic
Titolo: Istanze SQL

Altro quesito:
Ho una form in cui sono presenti 5 ADODC collegati a 5 rispettive Grid
che puntano a 5 diverse tabelle su un database SQL Server
Altresì sul load della form apro un recordset che punta ad un'altra tabella
ancora sempre dello stesso database.
Ho una connessione sempre attiva cnCustomer in tutto il progetto.
Sul load della form succede ciò in poche parole:
dim rsTabella as ADODB.Recordset
  set rsTabella = new ADODB.Recordset
  rsTabella.Open sMySQL, cnCustomer, ......
  set ADODC1.ConnectionString = cnCustomer.ConnectionString
  set ADODC2.ConnectionString = cnCustomer.ConnectionString
  set ADODC3.ConnectionString = cnCustomer.ConnectionString
  set ADODC4.ConnectionString = cnCustomer.ConnectionString
  set ADODC5.ConnectionString = cnCustomer.ConnectionString
  ADODC1.Open
  ADODC2.Open
  ADODC3.Open
  ADODC4.Open
  ADODC5.Open
Il mio problema è questo: ho notato che con due o tre utenti sulla form
in questione inizio ad avere degli errori di connessione di Licence ovvero
di licenze esaurite (premetto che SQLServer è licenziato per 10
connessioni).
Questo perchè ogni connection occupa un'instanza o lincenza di SQLServer????
Cambierebbe aprire le connessioni in questo modo:
set ADODC1 = cnCustomer
set ADODC2 = cnCustomer
....
????

set ADODC2 = cnCustomer
Che succederebbe se provassi a farlo?
-- 
ciao, hal

Hai già capito bene qual'è il problema.
Di fatto, se tu usi:
SET Oggetto_Ado.ActiveConnection=CnCustomer
forzi l'oggetto ad usare una connessione già attiva.
Se invece imposti
Oggetto_Ado.ConnectionString=CnCustomer.ConnectioString
semplicemente comunichi all'oggetto Ado che, al momento dell'Open, dovrà
creare una connessione 'gemella', ma di fatto nuova, con enorme spreco di
risorse.
Questo vale sia per i AdoDb.Recordset che per gli AdoDataControl.
Ciao
Alberto

 ha scritto nel messaggio
news:a9118u$vsts7$1...@ID-56381.news.dfncis.de...


 ha scritto nel messaggio
news:a911jc$6m9$1...@newsreader.mailgate.org...



Ovviamente.
Alberto


a livello di licenze non so, ma di sicuro a livello di risorse, se la
stringa di connessione è uguale (o equivalente, ad insindacabile giudizio di
ADO ;)) la connessione a database è la stessa;
intendo dire che non viene creato un altro oggetto connessione (anche se
esterrnamente sembrerebbe il contrario) ma di fatto la connessione fisica al
database sarebbe solamente una;
tutto questo grazie allla gestione del pool di connessioni di ADO;
ciao

 ha scritto nel messaggio
news:a912rv$um0dh$1...@ID-92828.news.dfncis.de...

E' vero.
L'ottimizzazione delle risorse gestita da Ado consente al sistema di
sfruttare un solo set di risorse, qualora la connessione sia effettivamente
identica.
Dal punto di vista di Sql-Server, ossia del provider, le connessioni attive
diventano invece multiple, per cui, se il server ha una gestione delle
licenze, il contatore si incrementa.
Dal punto di vista delle risorse, comunque, la cosa non è del tutto
trasparente, nel senso che c'è un utilizzo di memoria superiore.
Oltre a questo, va considerato che se non è impostato il
PersistSecurityInfo, non è detto che l'utilizzo della ConnectionString
direttamente sull'oggetto Ado, diverso da AdoDb.Connection, funzioni.
Ciao
Alberto