Ukončení připojení na SQL server   zodpovězená otázka

VB.NET, SQL

Microsoft Visual Studio 2010, SQL Server 2008 R2

Postup:

        Dim l_ConnectString As String = String.Format("Server={0};User Id={1};Password={2}", Me.txtServer.Text.Trim, Me.txtUserId.Text.Trim, Me.txtPassword.Text.Trim)
        Dim l_Connection As SqlClient.SqlConnection = New SqlClient.SqlConnection(l_ConnectString)
        l_Connection.Open()

.......

        l_Connection.Close()
        l_Connection.Dispose()

Nevím proč, ale na SQL zůstává stále běžet připojený proces vzniklý při Open(). l_Connection.Stat je closed. Kde je chyba a jak korektně ukončit připojení na SQL.

Díky za každou radu.

Karel Lichý

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Navázání spojení s DB serverem je náročná operace proto běžně .NET Framework využívá Connection Pooling pro "udržení spojení" - hodně laicky zjednodušeno. Více najdeš na odkazu níže:

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky, zkusil jsem prošťourat generovaný connectstring z VisualStudia a objevil jsem že tam generuje Pooling=... a když ho nastavím na true tak to chodí OK.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se, pooling=false

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používejte "using" klauzuli, aby byl objekt a spojení korektně otevřeno pouze po dobu nezbytně nutnou (po dobu užívání) . Váš postup se mi nezdá vhodný

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Běžně Using používám ale pro tohle to nejde. To co jsem uvedl je jen zjednodušení pro ukázku problému. sqlconnection mám definované globálně pro celý projekt takže protože mi připadá lepší mít definované connection než connectionstring.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

sqlconnection mám definované globálně pro celý projekt

A to je ta největší prasárna, jakou ste mohl udělat. Spojení do databáze udržujte jen po nezbytně nutnou dobu, např. pro provedení SQL příkazu a na všech místech používejte Using...End Using.

Bude se vám zdát, že neustálé otevírání a zavírání připojení musí mít obrovskou režii, ale opak je pravdou.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Přesně tak, když už nic, tak si udělejte nějakou statickou metodu CreateConnection, která Vám spojení vždy vytvoří.

Otevírat a zavírat spojení není výkonnostní problém, ve skutečnosti pod tím běží právě connection pool, který drží několik spojení (podle potřeby) neustále otevřených, a SqlConnection je interně používá, takže se pořád nepřipojuje a neodpojuje.

Jedno sdílené SqlConnection není vhodné, už proto, že pokud byste s ním pracoval ve více vláknech, budete řešit problém, jak na něm spouštět víc dotazů najednou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hm, pochopil jste smysl otázky ? Jednalo se o to proč connection.close neuzavře připojení do sql.

A navíc i using..endusing nechá spojení otevřené! takže jedině do connectionstring Pooling=False nebo přinutit pooling k uzavření spojení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback