[ veljkoz @ 05.11.2005. 17:24 ] @
Kada napravim neki upit koristeci neku konekciju, dobijem podatke preko DataReadera, zatvorim DataReader, zatvorim konekciju - i ... u listi aktivnih procesa na SQL Serveru i dalje stoji korisnik preko koga sam to uradio (vidi se sa exec sp_who). I tako stoji neodredjeno dugo. Vremenom, intenzivnim radom, procesi se gomilaju ...

Do sad sam radio preko sql komande "KILL spid" gde mi je spid prethodno identifikovani sp id korisnika, i to je radilo ok, ali daljim radom cesto dobijam gresku 11: "General Network Error", pa pretpostavljam da se to ne radi na taj nacin...

Da li mogu na neki nacin da se izlogujem sa servera bez ubijanja procesa?

Unapred hvala

[Ovu poruku je menjao veljkoz dana 05.11.2005. u 18:26 GMT+1]
[ negyxo @ 05.11.2005. 21:02 ] @
Probaj da kad uradis close konekcije dispose-jes konekcijski objekat i ne samo taj nego sve objekte koji su koristili konekciju ili probaj da koristis using za deklaraciju.
[ veljkoz @ 06.11.2005. 22:42 ] @
Nisam bas shvatio kako si mislio sa "using"? U svakom slucaju, dispose ne radi. Evo i primer da ne bude da pisem u prazno:

Code:
SqlConnection con=new SqlConnection("server=.;uid=uljez;pwd=sifra;database=TestBaza");

SqlCommand comm=new SqlCommand("SELECT * FROM PrevodGreske",con);

con.Open();

SqlDataReader read=comm.ExecuteReader();

read.Read();

Console.WriteLine("Procit'o {0}",read["Srpski"]);

con.Close();
con.Dispose();


U sqlQueryAnalyzer-u (SQL Server 2000) (pokrenut sa drugim loginom) posle svake komande izvrsavam sp_who, i uljez se pojavi posle otvaranja konekcije - con.Open() - i to 2 puta(!). Posle zatvaranja konekcije i dispose-ovanja objekta ostaju ovi spid-ovi.

Stvarno vise nisam pametan
[ havramm @ 07.11.2005. 00:04 ] @
Lepo sam ja rekao da tu nesto ne valja cim se konekcija otvara dva puta...

Flashback: Zanimljivo ponasanje SqlConnection i SqlCommand

Ali sta, nisam uspeo da provalim...
[ bunker @ 07.11.2005. 00:24 ] @
connection string:
"server=.;uid=uljez;pwd=sifra;database=TestBaza;pooling=false"

taj "pooling" vam pravi probleme, jer je postavljen na true po difoltu.

Ovo resava vas problem 100%
[ nervozica @ 07.11.2005. 10:18 ] @
Obavezno zatvaraj i SqlDataReader posle citanja podataka
[ negyxo @ 07.11.2005. 15:31 ] @
Pa, izgleda da connection pooling pravi problem. Probao sam onaj kod gore i sve jedno je dal' dispozujes ili ne. Znaci uradi stavi pooling na false kao sto bunker rece.

Citat:
havramm: Lepo sam ja rekao da tu nesto ne valja cim se konekcija otvara dva puta...

Flashback: Zanimljivo ponasanje SqlConnection i SqlCommand

Ali sta, nisam uspeo da provalim...


Pa koliko sam uspeo da vidim ima veze sa connection pooling-om, bez pooling-a se otvara samo jedna konekcija. Ni meni nije jasno zbog cega, google-o sam i nista.
[ veljkoz @ 07.11.2005. 19:12 ] @
Jeste, tacno je to! Vise ne dobijam ni "General network error", i sve radi sjajno i bajno :)

Da li postoje neke posledice ukidanja pool-a? (Pretpostavljam da nije nista ozbiljno jer je conn timeout valjda 20sek...ali ipak da pitam)
[ negyxo @ 07.11.2005. 21:06 ] @
Imas na netu opsirne informacije o connection pooling-u pa pogledaj.
Ukratko ako imas aplikaciju koja otvara mnogo istovremenih konekcija ili mnogo istovremenih usera-a, imaces neke slabije performanse prilikom otvaranje konekcije jer ce svaki put morati da se parsira connection string, uradi authentikacija od strane servera itd. a mislim i da preko connection pooling-a imas kontrolu nad resursima. Ukoliko postavis da ti je max broj otvorenih konekcija 10 i svih 10 neka su zauzete, tebi ce onda 11 zahtev za konekcijom ili biti odbijen ili biti vracena ukoliko se neka od aktivnih konekcija otpusti i tako ces ustvari, imati kontrolu nad resursima.