Новое соединение SQL для каждого запроса? - PullRequest
3 голосов
/ 22 сентября 2009

Я пишу серверное приложение, которое связывается с локальным сервером sql.

Каждый клиент должен будет прочитать или записать данные в базу данных.

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

Ответы [ 3 ]

6 голосов
/ 22 сентября 2009

Если вы используете какой-либо вариант ADO.NET, пул соединений будет использоваться автоматически (по крайней мере, с SQL Server), если вы не отключите его явно, поэтому нет никаких причин делать что-то особенное.

Не забывайте закрывать соединения после каждого использования - это просто вернет соединение в пул соединений.

6 голосов
/ 22 сентября 2009

Если у вас есть пакет операторов, которые должны выполняться друг за другом, вы должны использовать тот же SqlConnection. Как только вам больше не нужен SqlConnection и вы не знаете, когда вам снова понадобится соединение, вы должны закрыть соединение.

Так, например, если вам нужно выполнить 2 оператора вставки и один оператор обновления друг за другом, вы должны использовать один и тот же SqlConnection.
Наиболее важным преимуществом здесь является то, что вы можете поместить эти операторы в транзакцию, если это необходимо. Транзакции не могут быть разделены между соединениями.

Когда вы закончите работать с БД, вы можете закрыть соединение. По умолчанию используется пул соединений, и соединение будет возвращено в пул, чтобы его можно было использовать повторно при следующем подключении к БД. Время жизни соединения должно быть коротким, но вы не должны использовать отдельное соединение для каждой команды DbCommand.

2 голосов
/ 22 сентября 2009

Обычно вы должны создавать новое соединение для каждой команды и использовать преимущества встроенного пула соединений.

...