Pool di connessioni ODBC .NET
-
02-07-2019 - |
Domanda
Apro una connessione come questa:
Using conn as New OdbcConnection(connectionString)
conn.Open()
//do stuff
End Using
Se il pool di connessioni è abilitato, la connessione non viene fisicamente chiusa ma rilasciata al pool e verrà riutilizzata. Se è disabilitato, verrà chiuso fisicamente.
Esiste un modo per conoscere a livello di programmazione se il pool di connessioni è abilitato o no? e il numero di connessioni utilizzate e non utilizzate attualmente aperte nel pool?
MODIFICA: Devo ottenere queste informazioni dall'interno del programma, non posso andare a controllarle manualmente su ogni singolo PC su cui verrà distribuito il programma.
Soluzione
Sembra che tu possa leggere questa chiave di registro:
[HKEYLOCALMACHINE] \ SOFTWARE \ ODBC \ ODBCINST.INI \ SQL Server \ CPTimeout
(o una sua variante, a seconda del sistema operativo e dell'account utente). Se il valore è 0, il pool di connessioni è disabilitato. Se ha un valore superiore a 0, è abilitato.
See:
http://msdn.microsoft.com/en-us/library /ms810829.aspx
Non sono sicuro di ottenere il numero di connessioni aperte. Solo curioso: perché devi conoscere il numero?
Altri suggerimenti
MSDN come linee guida approfondite su questo
Configurazione del pool di connessioni da l'amministratore dell'origine dati
[snip]
In alternativa, puoi avviare ODBC Amministratore dell'origine dati in esecuzione richiesta. Sulla barra delle applicazioni, fai clic su Start, fai clic su Esegui, quindi digita Odbcad32.
La scheda per la gestione della connessione il pooling si trova nei dati ODBC Finestra di dialogo Amministratore sorgente in versione ODBC 3.5 e successive. Configurazione del pool di connessioni da il registro
Per versioni precedenti alla versione 3.5 di i componenti principali ODBC, è necessario modificare il registro direttamente in controllare il pool di connessioni Valore CPTimeout.
Il pooling è sempre gestito dal software del server di dati. Il punto è che in .NET non dovresti preoccuparti (ad esempio, questo è il motivo per cui dovresti sempre usare SqlConnection quando lavori con SQL Server - parte di ciò è che abilita il pool di connessioni).
Aggiornamento
Su Vista, basta digitare " ODBC " nel menu Start e troverà l'app che fa per te.
Aggiornamento dopo chiarimento dall'OP
In termini di determinazione se il pool di connessioni è abilitato su ogni macchina, guardando Linee guida MSDN Direi che sarebbe meglio se controlli i valori del registro (Vedi questo articolo per indicazioni sull'accesso al registro).
Tuttavia, TBH, a meno che le macchine client non siano davvero pessime, probabilmente non mi preoccuperei nemmeno. AFAIK è abilitato per impostazione predefinita e l'apertura delle connessioni su una macchina client (nella mia esperienza) non è mai stata un grosso problema. Diventa davvero un grosso problema quando si aprono lotti .
Per determinare il numero di connessioni aperte su ciascun db, prova questo sql - l'ho preso da un documento su Internet
select db_name(dbid) , count(*) 'connections count'
from master..sysprocesses
where spid > 50 and spid @@spid
group by db_name(dbid)
order by count(*) desc
Spids < = 50 sono usati da sqlserver. Quindi il sql sopra ti direbbe la connessione utilizzata dai tuoi programmi.