2015-03-04 7 views
1

Когда я запросы к базе данных из моих C# код, который я обычно использую что-то вроде этой конструкции:Располагая соединение, команду, адаптер

using (var connection = new OleDbConnection(connStr)) 
using (var command = new OleDbCommand(query, connection)) 
using (var adapter = new OleDbDataAdapter(command)) 
{///} 

Должен ли я на самом деле использовать все это «с помощью», или это будет достаточно, чтобы избавиться Будет ли доступно только соединение и все связанные объекты?

ответ

3

будет достаточно, чтобы утилизировать только соединение, и все связанные объекты тоже будут утилизированы?

No. Устранение соединения будет удалять объект соединения.

Как правило, безопасно применять каждый объект, который реализует IDisposable. (Еще одна вещь, удаление Command объект не распорядится связанный объект подключения)

+0

Но если они вложены с использованием утверждений? –

+0

вложен или другой, он будет распоряжаться собственным объектом, а не другим – Habib

3

Использование заявление только выбрасывайте экземпляр, который включает в себя. Это не влияет на другие объекты, которые связаны с.

Вы используете правильный путь в своем деле.

using (var connection = new OleDbConnection(connStr)) 
using (var command = new OleDbCommand(query, connection)) 
using (var adapter = new OleDbDataAdapter(command)) 
{ 

} // <-- Both connection, command and adapter disposed here 
0

Короткий ответ: нет, это будет уничтожать ваш объект соединения. Поэтому вам необходимо все это using.

Long (вдовцы) Ответ: за синтаксисом using, компилятор создает область, в которой создается переменная (переменная не существует вне using сферы) и метод Dispose будет вызываться при выходе из using объем.

Поэтому, если вы не создать command переменные в using блоке, метод Dispose не будет вызываться и поэтому объект не будет удален. (если вы не решите позвонить по телефону command.Dispose())