Близко ли соединение с базой данных здесь? - PullRequest
1 голос
/ 21 февраля 2012

Я получил этот код:

try
{
    using (OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString))
    {
        c.Open();

        using (OracleCommand recordExistentQuery = new OracleCommand("regular.IsExistent", c))
        {
        // here working on oraclecommand
        }
    } 
 } catch(Exception exc) { }

OracleConnection - это класс devArt dotConnect для Oracle. Будет ли этот код вызывать c.Close(), когда он выходит из (OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString)) { .... }?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Нет, будет звонить Dipose(). Блок using будет неявно вызывать Dispose() для объекта, указанного в операторе using.

Но часто для соединения с базой данных Dispose() обрабатывает функциональность Close(), освобождая connection / processId, который поддерживает соединение.

0 голосов
/ 21 февраля 2012

Я также хотел бы добавить, что в случае исключения где-то в вашем //here working on oraclecommand (в основном внутри вашего оператора using(...){ }, также будет вызван Dispose().

По замыслу вы должны иметь возможность совершать множественные вызовы объекта, реализующего IDisposable. В вашем случае отправка вызова на Close() после вашего блока кода using просто ничего не даст, так как соединение уже закрыто / возвращено в пул. Любые дополнительные вызовы после очистки объекта должны просто вернуться и ничего не делать.

...