Что использует соединение в коде - PullRequest
2 голосов
/ 03 ноября 2010

Какова цель using (connection) в коде - пожалуйста, объясните мне

static void HasRows(SqlConnection connection)
{
    using (connection)/// what is this line 
    {
        SqlCommand command = new SqlCommand(
          "SELECT CategoryID, CategoryName FROM Categories;",
          connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
                    reader.GetString(1));
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        reader.Close();
    }
}

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010
using (connection){
    connection.Open();
}

гарантирует, что connection будет закрыто, когда приложение выполнит его.похож на Try Catch.

try{
    connection.Open();
}
catch{
}
finally{
    connection.Dispose(); 
}

Удаление соединения - это еще один способ сказать, что закрытие соединения.Открытое соединение может привести к утечке памяти, а если у вас слишком много, оно может замедлить или заморозить все, к чему вы подключаетесь.

функция using закрывает соединение даже после того, как вы возвращаете что-то из класса, в котором находитесьтак же, как try catch.он всегда закрывает соединение независимо от того, что происходит внутри скобок.даже если есть исключение, которое выходит из класса / приложения, соединение все равно закрывается

5 голосов
/ 03 ноября 2010

Использование

Цитата с сайта:

Оператор using позволяет программисту указать, когда объекты, использующие ресурсы, должны их освободить.Объект, предоставленный оператору using, должен реализовывать интерфейс IDisposable.Этот интерфейс предоставляет метод Dispose, который должен высвобождать ресурсы объекта.

2 голосов
/ 03 ноября 2010

Я бы, вероятно, переписал метод примерно так:

static void HasRows(string connectionString)
{
    using (var connection = new SqlConnection(connectionString))
    using(var command = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories;",
        connection))
    {
        connection.Open();

        using (var reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
                        reader.GetString(1));
                }
            }
            else
            {
                Console.WriteLine("No rows found.");
            }
        }
    }
}

В исходной реализации вызывающая сторона может находиться на принимающей стороне исключения ObjectDisposedException, поскольку в качестве параметра передается SqlConnection.

...