2011-12-19 3 views
4

Я отслеживаю ошибку в библиотеке, которую я сам не писал. При использовании этой библиотеки с ASP.NET я получаю ошибки подключения db, потому что SQLConnection, кажется, закрывается, когда второе соединение открывается с той же строкой соединения.Открытие двух SQLConnections с тем же ConnectionString

Является ли это документированным поведением? Может ли открыть новый SQLConnection с той же строкой соединения, чтобы закрыть другой объект SQLConnection?

От отладки, которая кажется наиболее вероятной причиной моих проблем, но я не мог найти что-либо в Интернете, чтобы поддержать мою теорию.

+0

Простой способ найти это - выполнить поиск по слову new, и это, вероятно, будет создано снова .. это соединение может быть свойством или статической строкой, которая открыта и закрыта вашим кодом .. только создайте новый один раз .. или добавьте код, который будет проверять почтовый код Connection.State .., где вы его создаете .. и код, в котором он закрыт, или состояние подключения закрыто. – MethodMan

+1

Это должно работать нормально. Эта проблема, скорее всего, будет повторно использовать соединения между запросами. – SLaks

+0

@DJ KRAZE: Я уже нашел ту часть, где открывается второе соединение с той же строкой соединения. Как я писал, я хочу знать, нормально ли это, что это закрывает первое соединение. – magnattic

ответ

3

Нет, произойдет то, что при вызове метода SqlConnection.Open(), даже с теми же параметрами строки подключения, он выполнит одну из двух задач: либо повторно использовать неиспользуемое соединение из пула, либо создать новое соединение. В любом случае, вы получите бесконфликтные SPID для SQL Server.

0

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

+0

Извините, я не понимаю последнее предложение, не могли бы вы объяснить, что вы имеете в виду? Как вы можете повторно использовать объект, создав новую ссылку на новый объект? – magnattic

+0

Да, если у меня есть: SqlConnection conn = new SqlConnection (someconnstring); conn = new SqlConnection (someconnstring); ... тогда мой исходный объект соединения будет перезаписан новым. –

+0

@ Lynn Crumbling: Это не повторное использование существующего объекта. Кроме того, это не обязательно приведет к завершению соединения. – jason

3

Является ли это документированным поведением?

No.

Можно открыть новый SQLConnection с одной и той же строке соединения закрыть другой объект SQLConnection?

No.

Обратите внимание, что если вы не изменили настройки SQL Server позволяет 32,767 одновременных соединений. Но даже тогда это не объяснит поведение, которое вы видите.

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