Правильный способ повторного использования SqlConnection для страницы - PullRequest
3 голосов
/ 04 сентября 2011

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

1-й тип

Этот тип open one SqlConnection и методы 'имеет свойство SqlConnection.В основном они просто используют sConnection и в методе create, use, close 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 и использовать это открытое соединение внутри методов без необходимости открыватьновый.

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 сентября 2011

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

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

1 голос
/ 04 сентября 2011

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

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

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

...