Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zanimljivo ponasanje SqlConnection i SqlCommand

[es] :: .NET :: Zanimljivo ponasanje SqlConnection i SqlCommand

[ Pregleda: 3646 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Zanimljivo ponasanje SqlConnection i SqlCommand10.07.2004. u 15:08 - pre 218 meseci
Primetio sam zanimljivo ponasanje klasa SqlConnection i SqlCommand. Naime primetio sam da se uvek otvaraju dve konekcije prema SQL Server-u iako sam ocekivao da ce se otvoriti samo jedna. npr:

Code:

1:  SqlCommand cmd = new SqlCommand(spName, connection);
2:  cmd.CommandType = CommandType.StoredProcedure;
3:  SqlParameter param = cmd.Parameters.Add(paramName, SqlDbType.Int);
4:  param.Value = paramValue;
5:
6:  connection.Open();
7:  cmd.ExecuteNonQuery();
8:  connection.Close();


nakon izvrsenja linije 6, u Performance Monitor-u (pratim otvorene konekcije) otvorena je jedna konekcija (prethodno nije postojala nijedna), a nakon izvrsenja linije 7 postoje dve otvorene konekcije, prvo sam pomislio da SqlCommand (probao sam i sa SqlDataAdapter-om) interno otvara jos jednu konekciju, medjutim, tokom sledeceg potkretanja, desilo mi se da nakon linije 6 odmah postoje otvorene dve konekcije, a komanda sada ne otvara konekcije.

Zaista zanimljivo ponasanje. Ima li neko neko logicno objasnjenje zasto se ovo dogadja?


If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
Prikačeni fajlovi
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand12.07.2004. u 19:54 - pre 218 meseci
Možda odmah otvori još jednu konekciju iz pool-a? Ako bi pošli tim putem, možda je upravo stoga drugi put i imao odmah 2 pripremljene i otvorene konekcije. Mada, ne bi trebalo da ih otvori čak i ako su iz pool-a, ako se ne varam.
Ovo je čisto nagađanje.
Commercial-Free !!!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand12.07.2004. u 20:06 - pre 218 meseci
OT: Ovaj deo koda može da dovede do resource leak-a:

Code:

connection.Open();
cmd.ExecuteNonQuery(); // Ovo može da baci SqlException ako je row zaključan
connection.Close();


Idealno, trebalo bi konekcije uvek koristiti sa naredbom using, ali mi se čini da connectoin.Dispose(), koju using interno zove ne radi istu stvar kao Close(), pa je možda bolje staviti connection.Close() u finally blok.
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand13.07.2004. u 00:07 - pre 218 meseci
Citat:
Dragi Tata
Idealno, trebalo bi konekcije uvek koristiti sa naredbom using, ali mi se čini da connectoin.Dispose(), koju using interno zove ne radi istu stvar kao Close(), pa je možda bolje staviti connection.Close() u finally blok.


Slazem se da je preporuka koristiti using naredbu na mestu, ali sam prethodni primer naveo cisto, kao primer :), medjutim, malo sam pogledao i utvrdio da Dispose() interno poziva Close(), tako da se sa ovim drugim delom bas i ne mogu sloziti, evo i disasembliranog dela za SqlConnection.Dispose(bool) (bez ikakve namere za zloupotrebu i koriscenje disasembliranog koda u komercijalne svrhe)

Code:
protected  void Dispose(bool disposing)
{
    if (disposing)
    {
        ConnectionState state = this._objectState;
        switch (state)
        {
            case ConnectionState.Closed:
            {
                break;
            }
            case ConnectionState.Open:
            {
                this.Close();
                break;
            }
        }
        
        this._constr = null;
    }

    base.Dispose(disposing);
}

A posto SqlConnection.Dispose() interno poziva SqlConnection.Dispose(true) (Dispose pattern), mislim da to dokazuje da i Dispose i Close rade iste stvari. Medjutim to i dalje ne pojasnjava prvopostavljeno pitanje - zasto se otvaraju dve konekcije?
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6033



+4628 Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand13.07.2004. u 07:53 - pre 218 meseci
Jesi probao da disasembliraš SqlConnection.Open?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand13.07.2004. u 09:05 - pre 218 meseci
Da, i nisam primetio nista zanimljivo (bar sto bi ukazivalo na navedenu pojavu).
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

dejaniv
Beograd

Član broj: 11022
Poruke: 3
195.178.42.*



Profil

icon Re: Zanimljivo ponasanje SqlConnection i SqlCommand14.07.2004. u 09:33 - pre 218 meseci
Probaj da koristis transakciju (SqlTransaction). Nakon otvaranja konekcije zapocni novu transakciju ovako:

Code:

sqlConnection.Open();
sqlConnection.BeginTransaction();
sqlCommand = new SqlCommand(cmdText, sqlConnection, sqlTransaction);
...            
sqlTransaction.Commit();


Pozdrav!

dejaniv
dejaniv
 
Odgovor na temu

[es] :: .NET :: Zanimljivo ponasanje SqlConnection i SqlCommand

[ Pregleda: 3646 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.