C# Използването на SQL метод се нуждае от метод за затваряне?

Когато използвате using блок за SQL връзки в C#, това също ли е близък метод? Питам, тъй като трябва изрично да използвам метода con.Open(). Намерих този пример:

using (SqlConnection con = new SqlConnection(connectionString))
{
   con.Open(); // open method

   string queryString = "select * from db";
   SqlCommand cmd = new SqlCommand(queryString, con);
   SqlDataReader reader = cmd.ExecuteReader();
   reader.Read();

   ???         // What about a close method?
}

Или блокът using сам затваря връзката?


person mnlfischer    schedule 25.03.2013    source източник
comment
използване ще извика Dispose връзка и Dispose ще извика Close.   -  person Daniil    schedule 25.03.2013
comment
така че когато го използвам, използването ще затвори всички връзки. Всички връзки означават глобални, или само тези връзки в този метод/клас, където е?   -  person mnlfischer    schedule 25.03.2013
comment
@ManuelFischer само връзка в израз с помощта на (SqlConnection iWillDisposeConn = нов...   -  person Daniil    schedule 25.03.2013
comment
Наистина трябва да имате вашата команда и четец също в using блокове - те също са за еднократна употреба.   -  person Damien_The_Unbeliever    schedule 25.03.2013


Отговори (5)


using се превежда на:

SqlConnection con = new SqlConnection(connectionString)
try
{
   con.Open(); <-- open method

   string queryString = "select * from db";
   SqlCommand cmd = new SqlCommand(queryString, con);
   SqlDataReader reader = cmd.ExecuteReader();
   reader.Read();
}
finally
{
    if (con!= null)
        ((IDisposable)con).Dispose();
}

където ((IDisposable)con.Dispose(); затваря това, което трябва да бъде затворено.

person Andrey    schedule 25.03.2013

Не е нужно да го затваряте - using е достатъчно. MSDN казва:

За да сте сигурни, че връзките винаги са затворени, отворете връзката вътре в използващ блок, както е показано в следния кодов фрагмент. Това гарантира, че връзката се затваря автоматично, когато кодът излезе от блока.

person psur    schedule 25.03.2013

Не, не е нужно да извиквате Close-Метода на SqlConnection. Когато се изхвърли в края на употребата, се затваря автоматично. (Dispose-Методът извиква Close()) [1]

person jAC    schedule 25.03.2013

Другите отговори са верни, но искам да бъда малко по-ясен.
MSDN заявява следното:

Затваряне и Изхвърляне са функционално еквивалентни.

Тъй като използването на using ще извика Dispose, не е необходимо отделно извикване на Close.

person Daniel Hilgarth    schedule 25.03.2013

когато използвате ключовата дума 'using' и създадете връзка в нея. връзката е отворена, доколкото има обхвата на ключовата дума 'using', когато се достигне затваряща скоба, връзката се затваря автоматично, тъй като е дефинирана в рамките на обхват и обхватът не съществува

с други думи, третирайте го като локална променлива, която може да бъде достъпна само в рамките на обхвата. надявам се това да помогне.

person XTGX    schedule 25.03.2013