OledbConnection.Dispose() закрывает соединение?

Возможный дубликат:
Нужно ли закрывать DbConnection, если используется предложение using?

OledbConnection.Dispose() закрывает соединение?

Я знаю, что SqlConnection делает, но как насчет OledbConnection?


person CJ7    schedule 20.08.2012    source источник
comment
Как вы думаете, почему есть разница?   -  person Amiram Korach    schedule 20.08.2012
comment
Да. Вместо вызова .Dispose попробуйте использовать блок using, который удалит соединение, поскольку код внутри блока using завершает выполнение.   -  person shahkalpeshp    schedule 20.08.2012
comment
@AmiramKorach: люди говорили только о SqlConnection. DbConnection — это абстрактный класс, поэтому он зависит от фактической реализации OledbConnection.   -  person CJ7    schedule 20.08.2012


Ответы (5)


Да, тоже.

Источник: метод OleDbConnection.Dispose (логический)

Метод Dispose вызывает Close и удаляет OleDbConnection из пула соединений.

Подробную информацию см. в разделе Remarks справочной ссылки, чтобы узнать о случае освобождения как управляемых, так и неуправляемых ресурсов.

person Niranjan Singh    schedule 20.08.2012

Да, согласно документации на MSDN http://msdn.microsoft.com/en-us/library/aa325890(v=vs.71).aspx , OleDbConnection.Dispose() также вызывает OleDbConnection.Close().

person Tadeas Kriz    schedule 20.08.2012

Да, работает MSDN:

Метод Dispose вызывает Close и удаляет OleDbConnection из пула соединений.

Обратите внимание, что приведенное выше относится к .NET Framework 1.1. Но (в этом случае) вы можете рассчитывать на то, что ничего не изменится.

Кроме того, вы можете быть почти на 100 % уверены, что каждый класс, реализующий IDbConnection, «закроет» соединение в методе Dispose — что бы это ни значило для конкретной реализации, это не имеет значения, но это будет эквивалентно вызову Close вручную.

Каждая реализация, которая не ведет себя таким образом, должна считаться ИМО сломанной.

person Christian.K    schedule 20.08.2012

Вот окончательное доказательство... фактический код метода Dispose, полученный с помощью рефлектора:

// System.Data.OleDb.OleDbConnection
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        this._userConnectionOptions = null;
        this._poolGroup = null;
        this.Close();
    }
    this.DisposeMe(disposing);
    base.Dispose(disposing);
}
person Shadow Wizard Wearing Mask V2    schedule 20.08.2012

Да. Если нет, то он не может полностью распоряжаться своими ресурсами. BinaryReader, BinaryWriter и т. д. также закрывают базовый поток.

person Cole Johnson    schedule 20.08.2012