Question

J'ai une application connectée à une base de données via un AdoTemplate spring.net. Je suis chargé de créer une méthode de restauration de la base de données qui maintient l'application en cours, mais supprime les connexions réseau de manière à supprimer l'ancienne base de données et à afficher la nouvelle. Ma question est de savoir comment puis-je supprimer toutes les connexions actuelles de cette application à cet AdoTemplate? Au printemps 1.1, je ne vois aucune méthode publique permettant de supprimer les connexions réseau.

Était-ce utile?

La solution 2

Ce qui a fini par bien fonctionner était:

   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();

Autres conseils

il n'y a pas de "connexion physique" physique ou physique; entre AdoTemplate et la base de données SQL. Laissant de côté les transactions, AdoTemplate crée un nouvel objet SqlConnection pour chaque méthode exécutée à partir de ADO.NET, exécute une commande et dispose ensuite de l'objet SqlConnection. Sous le capot, ADO.NET met en cache les connexions physiques à la base de données dans un pool. Lorsque vous créez un nouvel objet SqlConnection, l'une de ces connexions physiques mises en cache est obtenue à partir du pool pour servir ce lien SqlConnection. Cela signifie que vous aurez besoin d'une stratégie différente pour résoudre votre problème. Une stratégie qui me vient à l’esprit est d’obtenir la liste des connexions actives à partir de la base de données sysprocesses et d’exécuter l’instruction KILL sur ces connexions. Une brève recherche sur Google a permis de lire cet article . Notez que cet article fait référence à mssql 2000. Je suis presque certain que vous devez chercher un peu plus sur Google pour trouver une solution pour 2005. Depuis 2005, il n’est plus autorisé à accéder aux tables système à partir de maintenant.

hth, Erich

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top