Преимущества «использования» блока для инициализации SqlCommand

Я понимаю концепцию using блока block при подключении к серверу sql из вашего приложения, так как он закроет соединение, как только оно выйдет из области действия, и сэкономит нам время на запись блоков try catch finally .

Но мой вопрос: есть ли преимущества using при инициализации SqlCommand как правило, я бы сделал что-то вроде:

 string cs = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString; using(SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.City", con); con.Open(); DropDownList1.DataSource = cmd.ExecuteReader(); DropDownList1.DataTextField = "City"; DropDownList1.DataValueField = "ID"; DropDownList1.DataBind(); } 

Но какие возможные преимущества я могу получить, поместив инициализацию SqlCommand в block использования?

 string cs = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString; using(SqlConnection con = new SqlConnection(cs)) { using(SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.City", con)) { con.Open(); DropDownList1.DataSource = cmd.ExecuteReader(); DropDownList1.DataTextField = "City"; DropDownList1.DataValueField = "ID"; DropDownList1.DataBind(); } } 

Весь материал, который я искал в Интернете, говорит о закрытии соединения, как только он выходит из области видимости. Да, я понимаю, что, но включение SqlCommand в использование блока сделает его более эффективным или нет?

Любые советы или указатели очень благодарны вам.

Вы можете это четко видеть, глядя на исходный код.

Это реализация SqlCommand.Dispose :

 override protected void Dispose(bool disposing) { if (disposing) { _cachedMetaData = null; } base.Dispose(disposing); } 

Как вы можете видеть, это мало что делает. Но, глядя на base.Dispose :

 public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } 

SqlCommand наследует от DbCommand , который, в свою очередь, наследует от Component . Component реализует финализатор , что означает, что объект не будет удален, как только никто не ссылается на него, поскольку он все еще имеет ссылку на очередь финализатора .

Когда вы завершаете SqlCommand с using оператора using , самая важная его часть состоит в том, что его базовый класс (компонент) вызывает GC.SupressFinialize , который удаляет ссылку на очередь финализатора и позволяет собирать объект после того, как GC запускается.

Вот почему SqlCommand реализует IDisposable и должен быть удален.

  • как передать значение переключателя для фильтрации данных
  • Добавление таблиц SqlMembership с использованием EF Code First
  • большой выгравированный GridView, Rollup и Grand Totals с SQLdataSource
  • нужна помощь с некоторой ошибкой хранимой процедуры
  • Как присоединиться к этим таблицам, чтобы показать связанное имя пользователя?
  • Возвращаемое значение хранимой процедуры SQL Server и использование его в C #
  • Запустить код при завершении страницы
  • Ошибка таймаута в транзакции базы данных
  • Не удалось открыть подключение к базе данных из значения конфигурации
  • База данных «... \ DATABASE.MDF» не может быть обновлена, поскольку она доступна только для чтения или имеет файлы только для чтения
  • Уже открыт считыватель данных, связанный с этой командой. Как это возможно?
  • Interesting Posts

    Выбрать столбец из одной таблицы по столбцу из другой таблицы

    Как обновить столбец varbinary (max) с контуром, хранящимся в столбце varchar?

    Получение значений из операции RESTORE LABELONLY

    Как проверить взаимное существование полей в одной таблице в двух столбцах

    Сохраненная процедура с использованием курсоров резко замедляется

    Msg 203, уровень 16, состояние 2, не является допустимым идентификатором

    Каков наилучший способ реализации этого SQL-запроса?

    SQL Server: результат подзапроса «подсчет» не является числовым

    Запрос Sql для объединения двух строк в одну строку, если id одинаковый

    Файл не существует в базе данных – Снимок SQL Server

    Как вернуть новое значение столбца IDENTITY из инструкции SELECT SQLServer?

    Практическое руководство. Создание триггера для даты автоматического обновления с помощью SQL Server 2008

    Является ли @mp: id всегда в порядке XML Doc?

    MSSQL bigint Unix Timestamp для Datetime с миллисекундами

    Не в разделе не фильтрации SQL Server с открытым запросом

    Давайте будем гением компьютера.