Spring.net Отключить все adotemplate соединения? - PullRequest
0 голосов
/ 15 января 2009

У меня есть приложение, которое подключено к базе данных через AdoTemplate Spring.net. Мне поручено создать метод восстановления базы данных, который поддерживает работу приложения, но сбрасывает сетевые подключения, чтобы удалить старую базу данных и вызвать новую. У меня вопрос, как мне отбросить все текущие соединения, которые это приложение имеет к этому AdoTemplate? Весной 1.1 я не вижу публичного метода сброса сетевых подключений.

Ответы [ 2 ]

1 голос
/ 15 января 2009

нет физической "связи" между AdoTemplate и базой данных SQL. Оставляя транзакции в стороне, AdoTemplate создает новый объект SqlConnection для каждого метода, который выполняется из ADO.NET, выполняет команду и после этого удаляет объект SqlConnection. Под капотом ADO.NET кэширует физические соединения с базой данных в пуле. Когда вы создаете новый объект SqlConnection, 1 из этих кэшированных физических соединений получается из пула для обслуживания этого SqlConnection. Это означает, что вам потребуется другая стратегия для решения вашей проблемы. Одна стратегия, которая приходит мне в голову, - это получить список активных соединений из базы данных sysprocesses и выполнить для них оператор KILL. Короткий поиск в Google поднял эту статью . Обратите внимание, что эта статья относится к mssql 2000. Я почти уверен, что вам нужно еще немного погуглить, чтобы найти решение для 2005 года. С 2005 года доступ к системным таблицам больше не разрешается.

НТН, Эрих

0 голосов
/ 25 февраля 2009

То, что в итоге получилось прекрасно, было:

   SqlConnection.ClearAllPools();
   // if any connections were being used at the time of the clear, hopefully waiting
   // 3 seconds will give them time to be released and we can now close them as well
   Thread.Sleep(3000);
   //clear again
   SqlConnection.ClearAllPools();
...