Использование одного соединения является крайне плохой идеей - если доступ к соединению должным образом заблокирован, это означает, что ASP.NET может обслуживать только одного пользователя за раз, что серьезно ограничит способность вашего приложения расти.
Если соединение не должным образом заблокировано, все может стать очень странным. Например, один поток может удалить соединение, в то время как другой поток пытается выполнить для него команду.
Вместо того, чтобы использовать одно соединение, вы должны просто создавать новые объекты соединения, когда они вам нужны, чтобы использовать преимущества пула соединений.
Пул соединений - поведение по умолчанию для классов SqlClient (и, возможно, других поставщиков данных). Когда вы используете пул соединений, каждый раз, когда вы «создаете» соединение, оно будет фактически извлечено из пула существующих, так что вы не будете нести затраты на его создание каждый раз. Когда вы отпускаете его (закрываете или удаляете), вы возвращаете его в пул соединений, сохраняя при этом общее количество соединений относительно низким.
Редактировать: Вы увидите упомянутую ошибку ( Период ожидания истек до получения соединения из пула ), если вы не закрываете (или не удаляете) свои соединения. Убедитесь, что вы делаете это, как только вы закончите, используя каждое соединение.
Есть несколько хороших вопросов о переполнении стека, которые обсуждают это, и я подозреваю, что это может быть полезно!