Насколько безопасно или вредно использование BasePage для открытия и закрытия соединения SQL? - PullRequest
2 голосов
/ 02 сентября 2010

У меня есть класс BasePage.cs, который используется другими файлами .cs вместо System.Web.UI.Page (открытая частичная страница класса: BasePage).

Я использую его для открытия и закрытияСоединения SQL, чтобы убедиться, что каждое соединение SQL закрыто.

Код выглядит следующим образом

{
    public class BasePage: System.Web.UI.Page
    {
        public SqlConnection globalConnection;

        protected override void OnInit(EventArgs e)
        {
             globalConnection = new SqlConnection();
             globalConnection.ConnectionString = ConfigurationManager.ConnectionStrings["kontemiConnectionString"].ToString();
             globalConnection.Open();
        }

        protected override void OnUnload(EventArgs e)
        {
            if (globalConnection != null)
            {
                 globalConnection.Close();
            }
        }
    }
}

До сих пор он работал очень хорошо для меня.Это означает, что каждый раз, когда соединение открывается, оно также закрывается.Или, по крайней мере, я так думал.

Мой вопрос заключается в том, является ли это решение пуленепробиваемым, и каждое отдельное соединение закрывается в случае ошибки обработки во время выполнения кода.При трассировке этого кода, если я специально создаю ошибку 500, она всегда переходит к событию OnUnload и закрывается.

Итак, считаете ли вы это выполнение безопасным? (Чтобы прекратить обсуждение, не следует ли мне открывать SQL, когда он мне действительно нужен, ответьте, что каждая страница, которая использует BasePage, также открывает соединение SQL.)

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

Рекомендуется открывать и закрывать соединения SQL там, где вы их используете.Под капотом CLR в любом случае управляет пулами соединений - повторно использует соединения и закрывает их, когда считает нужным.Выполнение большого количества операций открытия и закрытия соединений с одной и той же строкой соединения не приводит к таким дополнительным расходам, как вы могли бы ожидать.

1 голос
/ 02 сентября 2010

Я могу ошибаться, но я предполагаю, что соединение не будет закрыто, если жизненный цикл страницы завершится через исключение до срабатывания OnUnload.Самое меньшее, что вы можете сделать, чтобы предотвратить это, это убедиться, что вы перехватываете все исключения на глобальном уровне «последнего шанса» и закрываете там соединение.Я все еще думаю, что локальное использование соединений, в идеале с using блоками, является лучшим решением, потому что оно не держит соединения открытыми дольше, чем нужно, и вам не нужно беспокоиться об их закрытии (семантика using сделает всю работу за вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...