Должны ли мы закрыть соединение с базой данных Sql Server перед использованием другого запроса? - PullRequest
0 голосов
/ 31 декабря 2011

когда мы хотим подключиться к базе данных из Visual Studio, следует ли нам всегда проверять (перед использованием другого запроса), что если наше соединение открыто, закройте его и снова откройте его ??

 if(connection is open){
  close connection;
   }  
  open connection for another use;

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

Предполагая, что вы используете .NET, вы обычно должны открывать и закрывать соединение для каждой логической операции.Если вы выполняете несколько запросов по одному и тому же пути к коду (то есть вы знаете , что собираетесь делать другой запрос), то имеет смысл оставить соединение открытым, но я бы не оставил его открытым "на всякий случай ".

Имейте в виду, что пул соединений в .NET делает" открытие соединения "достаточно дешевым, так как сетевое соединение все равно будет работать.Обычно вы используете что-то вроде:

using (SqlConnection connection = new SqlConnection(...))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand(connection, sql))
    {
        // Execute the command etc
    }
}

Оператор using автоматически "закроет соединение" (читай: верните его в пул соединений) автоматически, когда вы закончите.

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

Конечно, если вы используете что-то вроде LINQ to SQL, обработка соединений, скорее всего, будет в основном сделана для вас.

1 голос
/ 31 декабря 2011

Зависит, но в большинстве случаев - ответ нет .

Вы должны закрывать соединение только в том случае, если между запросами относительно много времени.

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

Особенно для вашего случая - если вы используете пул соединений - это не имеет значения - вы закроете соединение или нет,

НО

в случае неправильного использования транзакций или установки состояния сеанса SET оператор, который может помешать будущим запросам - тогда я рекомендую закрыть соединение и снова открыть его - просто чтобы быть уверенным, что вы зафиксировали или откатили все забытые транзакции и состояние сеанса были сброшены до значений по умолчанию

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