Domanda

Ho un'applicazione connessa a un database tramite un AdoTemplate di spring.net. Sono incaricato di creare un metodo di ripristino del database che mantiene in esecuzione l'app ma elimina le connessioni di rete in modo da eliminare il vecchio database e visualizzare quello nuovo. La mia domanda è: come posso eliminare tutte le connessioni correnti che questa applicazione ha con questo AdoTemplate? Non vedo alcun metodo pubblico nella primavera 1.1 per eliminare le connessioni di rete.

È stato utile?

Soluzione 2

Ciò che ha funzionato alla grande è stato:

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

Altri suggerimenti

non esiste alcuna "connessione" fisica " tra AdoTemplate e il database SQL. Lasciando da parte le transazioni, AdoTemplate crea un nuovo oggetto SqlConnection per ciascun metodo che viene eseguito da ADO.NET, esegue un comando e successivamente elimina l'oggetto SqlConnection. Sotto i cofani, ADO.NET memorizza nella cache le connessioni fisiche al database in un pool. Quando si crea un nuovo oggetto SqlConnection, 1 di quelle connessioni fisiche memorizzate nella cache viene ottenuta dal pool per servire tale SqlConnection. Ciò significa che avrai bisogno di una strategia diversa per risolvere il tuo problema. Una strategia che mi viene in mente è quella di ottenere l'elenco delle connessioni attive dal database sysprocesses ed eseguire l'istruzione KILL su di esse. Il breve googling ha sollevato questo articolo . Si noti che questo articolo fa riferimento a mssql 2000. Sono abbastanza sicuro che per trovare una soluzione per il 2005 è necessario cercare un po 'di più su Google. Dal 2005 non è più possibile accedere alle tabelle di sistema in futuro.

hth, Erich

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top