2009-09-22 6 views
3

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

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

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

ответ

6

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

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

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

2

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

+0

Это определенно плохая практика ... –

+0

Я предполагаю, что каждый клиент будет выполнять одну команду за раз. Поэтому я не вижу, что такое плохая практика – M4N

6

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

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

Смежные вопросы