Правильный способ повторного использования SqlConnection для страницы

Я постараюсь описать это как можно проще. У нас есть SqlConnection и 3 метода.

1-й тип

Этот тип открывает одно SqlConnection, а методы имеют свойство SqlConnection. В основном они просто используют sConnection, а внутри метода создают, используют, закрывают SqlCommand и SqlDataReader.

using (SqlConnection sConnection = new SqlConnection(string))
{
    sConnection.Open();

    Method objMethod = new Method();
    objMethod.SqlConnection = sConnection;
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.SqlConnection = sConnection;
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.SqlConnection = sConnection;
    objMethod3.DoSomething();
}

2-й тип

Этот тип создаст новые SqlConnection, SqlCommand, SqlDataReader внутри каждого метода отдельно. Для 3 методов потребуется открыть и закрыть 3 SqlConnections.

    Method objMethod = new Method();
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.DoSomething();

Вопрос в том, следует ли сохранять SqlConnection инкапсулированным в методах или безопасно создавать в SqlConnection и использовать это открытое соединение в методах без необходимости открывать новое.

Спасибо


person feronovak    schedule 03.09.2011    source источник


Ответы (2)


Sql-соединения объединены в пул, поэтому, если вас беспокоит производительность; есть вероятность, что оба метода будут использовать только одно соединение, и поэтому штраф за использование второго подхода незначителен.

С другой стороны, второй подход показывает лучшую инкапсуляцию и разделение проблем. Я бы выбрал второй вариант.

person Icarus    schedule 03.09.2011

SqlConnections объединены в пул. С Sql Server вам лучше всего открывать, использовать и закрывать (что с помощью блока - расширяется до, наконец, с помощью Dispose, который вызывает закрытие).

На самом деле, сохранение соединения открытым и удержание его может на самом деле снизить производительность, поскольку вы побеждаете поведение пула и заставляете другие потоки / запросы без необходимости добавлять другое соединение в пул, когда оно не требуется.

Пусть бассейн сделает свою работу.

person bryanmac    schedule 03.09.2011