19 messaggi dal 15 febbraio 2002
Ciao a tutti,
leggendo la documentazione dell'msdn ho scoperto le connection polling...
Ho fatto una prova creando un'applicazione console stupidissima che aprisse 2 connessioni e facesse 2 query su 2 db...
Il codice era molto simile a quello presente sull'msdn, quest'ultimo è così:
"
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// Pool A is created.

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
// Pool B is created because the connection strings differ.

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// The connection string matches pool A.
"

Il problema è che se scrivo questo codice, mi restituisce errore...(oggetto conn dichiarato già dichiarato..)
Probabilmente ho compreso male la funzione dei poll di connessione... A cosa servono?Come si utilizzano?
Mi sorge il dubbio che i poll sono creati quando sono aperte connessioni con ConnectionString uguale da 2 applicazioni diverse, in questo caso la connessione aperta dalla prima applicazione viene "condivisa" anche dalla seconda... E' così?
Dopo questo dubbio amletico, vi lascio:)
A presto e grazie...
Gianluca

il connection pooling fa un pool di connessioni sulla base di una stessa connessione (ovvero della stessa conn string).

btw hai errore perchè hai già dichiarato una volta conn, dunque per funzionare non dovresti dichiararlo la seconda volta.

<hr color="#31659C" noshade size=1>
Daniele Bochicchio
<b>Content manager di http://www.aspitalia.com</b>

ASP 3 per esempi il mio libro

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
19 messaggi dal 15 febbraio 2002
Anche dichiarando conn solo 1 volta mi restituisce un'eccezione...
Il codice + o meno è questo:
"
SqlConnection conn;

conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();

conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
"
Poi se provo a fare una query sul db "northwind" mi restituisce un'eccezione, mentre se faccio la query sul db pubs tutto ok... Così sembra che la connessione al db northwind "sovrascrive" la connessione al db pubs...
Sigh:(((
Gianluca

252 messaggi dal 18 dicembre 2001
Forse non ti è chiaro il concetto di polling...

Il polling delle connessioni è un meccanismo intrinseco ad ASP che "controlla" se una connesione aperta puo essere utilizzata per qualche altra richiesta dati verso il dbms.

Se tu hai una connessione aperta verso il dbms diciamo così:

conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";

Asp verifica la stringa di connessione e la mette nel polling delle connessioni.

Successivamente (e qui c'è l'errore, non puoi usare sempre l'oggetto conn perchè è ovvio che viene sovrascritto) crei un altro oggetto connection :

conn2.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";

e apri la connessione, il polling riconosce che si tratta della stessa stringa di connessione di quella precedente e (intelligentemente) non crea una nuova connessione verso il dbms ma utilizza la stessa di prima, il tutto in maniera trasparente al programmatore, cioè a livello di ASP.

La stringa di connessione deve essere ESATTAMENTE LA STESSA e devi sempre usare l'oggetto Server.CreateObject altrimenti il polling non sarà attivato.

Spero di esserti stato di aiuto.


renzo

Rei.
19 messaggi dal 15 febbraio 2002
Ok grazie tutto chiaro!
Un unico dubbio sul fatto che per creare la connessione debba usare l'oggetto Server.CreateObject....
Se uso un oggetto connection in una pagina asp tutto ok, lo creo con Server.CreateObject. Se creo un'applicazione normale (es applicazione console in c#) non posso dichiararlo normalmente con : SqlConnection conn ??
Gianluca

252 messaggi dal 18 dicembre 2001
Attenzione , io sto parlando di ASP e non di ASP.NET, non conosco ancora bene il meccanismo di polling su ASP.NET perchè sto ancora studiando il mio librone da 1200 pagine ;)..

Tuttavia se stai in net semplicemente condividi la connessione tra i due DataReader in questo modo :

Dim Conn = New System.Data.SqlClient.SqlConnection()
Conn.ConnectionString = "tua stringa di connessione"
Conn.Open

Dim cm1 As New System.Data.SqlClient.SqlCommand()
cm1.Connection = Conn
cm1.CommandType = CommandType.Text
cm1.CommandText = "tua_stringa_sql_1"
Dim sn1 As System.Data.SqlClient.SqlDataReader
sn1 = cm.ExecuteReader
sn1.Read()

Dim cm2 As New System.Data.SqlClient.SqlCommand()
cm2.Connection = Conn 'condivide la connessione precedente...
cm2.CommandType = CommandType.Text
cm2.CommandText = "tua_stringa_sql_2"
Dim sn2 As System.Data.SqlClient.SqlDataReader
sn2 = cm2.ExecuteReader
sn2.Read()

'fai qui un Disposing di tutto cio' che hai aperto..

Spero di esserti stato di aiuto. Ciao.

renzo

Rei.
19 messaggi dal 15 febbraio 2002
Sentendo parlare di Server.CreateObject mi è venuto il sospetto che parlassi solo di ASP:)
Ora è tutto chiaro...
Cmq nel codice che hai scritto non penso che entri in gioco il poll di connessioni, con 'cm2.Connection = Conn' non condivide la stessa connessione ma si riferisce semplicemente allo stesso oggetto connessione (in pratica hai 1 unico oggetto connessione puntato da Conn, cm1 e cm2). O almeno penso....
Allo stato dei fatti non cambia niente... così dovresti semplicemente instanziare un oggetto in meno...
CIAO!!!
Gianluca

252 messaggi dal 18 dicembre 2001
Appunto, non credo che il polling entri in gioco perchè in pratica sto sfruttando la stessa connessione.. Mi sembra che sia il metodo ottimale per chiedere dati..

Se l'articolo su MSDN che hai letto si riferisce ad ADO.NET mi viene da pensare che i progettisti NET non abbiano toccato nulla per cio' che concerne il polling delle connessioni, infatti dice che se la striga è la stessa , il polling utilizzerà (in maniera intrinseca) la stessa connessione..

Ciao a presto.

renzo

Rei.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.