Как должно называться соединение SQL в приложении? - PullRequest
1 голос
/ 24 августа 2010

Вернуться к основам.

У меня есть приложение, написанное на c #, и я использую sqlClient для подключения к базе данных.

У меня есть несколько методов, и я обычно открываю соединение в блоке try catch

try{
    **open connection**
   //Mehod1()
   //Method2()
   ........
 }catch(exception){
   //Do something
 }finally{
  **close connection**
 }

Проблема в том, что в пуле много соединений.

Я использую главную страницу, а на главной странице загружаю меню из базы данных (разные меню для каждого пользователя).

Затем на главных страницах снова открываю соединение, чтобы получить остальные данные.

В середине страницы это может быть метод, который необходимо снова подключить к базе данных.

Мой вопрос

Это хорошая практика?

Я что-то не так делаю?

Есть ли лучшая практика, чтобы избежать нескольких соединений? А как насчет синглтон-паттерна?

Заранее спасибо

РЕШЕНИЕ

Я нашел причину !!!

Я забыл закрыть соединение.

Я был уверен, что закрыл его, но иногда ты не можешь быть так уверен.

Спасибо всем за ваши ответы

Ответы [ 3 ]

3 голосов
/ 24 августа 2010

Поскольку соединение объединено в пул, вам не нужно «повторно» использовать его различными способами.

Я использую следующий код:

using(SqlConnection connection = new SqlConnection("your-connectionstring"))
{
  // Do your stuff here...
}

Using - это просто короткий способ написания try-catch-finally. Используется для одноразовых предметов.

И это может входить в каждый метод.

РЕДАКТИРОВАТЬ: Использование подключения из пула также не снижает производительность. Вся информация о соединении кэшируется в любом случае. Так что просто используйте SqlConnection на атомарном уровне.

Хорошо, если обработчик ConenctionString более универсален ...

0 голосов
/ 28 августа 2010

Использование (), как сказано выше, является хорошим способом создания нового объекта класса, который реализует IDisposable. Но с этим, как говорится, вы не можете оставить ваше соединение открытым, как только вы сделали. У вас есть конечное число соединений в пуле, и если соединение не закрыто, это может привести к истощению других идентификаторов SPID, ожидающих активного соединения, которые в конечном итоге истекают. Так что вы должны

  1. Всегда делайте атомарные и маленькие транзакции.
  2. Закрыть, когда закончите.

Существует DAAB (блок приложения для доступа к данным) из Microsoft Enterprise Library, который можно использовать в качестве помощника для открытия и закрытия соединений + для выполнения многих других задач, связанных с БД. Вот http://msdn.microsoft.com/en-us/library/cc511547.aspx

0 голосов
/ 24 августа 2010

Возможно, вы не избавились от SqlConnections, попробуйте это:

using (SqlConnection connection = new SqlConnection(connectionString))
{ }

этот синтаксис автоматически вызовет метод Dispose(). Использование деталей выписки здесь

ОБНОВЛЕНИЕ:

Немного больше информации об этих методах вы можете найти здесь: Закрыть , Dispose

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

Как видите, Dispose() делает чуть больше Close().Поэтому если вы собираетесь повторно использовать соединение позже, используйте метод Close(), если не уничтожите его полностью, используя метод Dispose(), который автоматически вызывается, если вы используете синтаксис выше.

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