[C#][.net][RESOLU] Prob fermeture de connexion: bug .NET ?

Prob fermeture de connexion: bug .NET ? [C#][.net][RESOLU] - C#/.NET managed - Programmation

Marsh Posté le 28-02-2007 à 10:29:25    

/****************************************************************************/
 
Bon j'ai enfin trouvé la solution à mon problème ci dessous: il suffit de rajouter pooling = false; dans les info de connexion afin de ne pas se retrouver avec un pool de connexion qui reste ouvert.
 
IDbConnection _Connexion = new System.Data.SqlClient.SqlConnection("Persist Security Info=False;User ID=sa;Initial Catalog=TEST_JU2;Data Source=XXX;pooling=false;" );
 
OU
 
mettre
 
System.Data.SqlClient.SqlConnection.ClearPool((System.Data.SqlClient.SqlConnection)_Connexion); // ferme le pool de connexion
àprès le _Connexion.Close();
 
Par contre, je ne connais pas l'inpacte sur les perf ou autres effets de bord encore. :D
 
Merci à tous,
 
VDM
/****************************************************************************/
 
 
 
Bonjour à tous,
 
J'ai un soucis avec mes fermetures de connexion SQL. Le principe est très simple. J'ai développé un outil qui permet d'exécuter des scripts SQL sur une base de donnée. Si je me connecte en Master et que je choisit de dropper une base "A", pas de soucis. Par contre si je teste au préalable la validité de ma base "A" (par une simple requete Select blabla...) et que ensuite je me connecte en Master pour dropper ma base, il me met que "la base "A est présentement utilisée". Mon soucis est apparu dans un gros programme, j'ai donc simplifié le code au maximum pour isoler le problème. J'ai donc dans une simple fenetre 2 boutons:
 
// Le bouton 1 fait un simple test d'existence d'une base
private void button1_Click(object sender, EventArgs e)
        {
            // Création de la connexion
            IDbConnection _Connexion = new System.Data.SqlClient.SqlConnection("Persist Security Info=False;User ID=sa;Initial Catalog=TEST_JU2;Data Source=XXX;" );
 
            // Ouverture de connexion
            _Connexion.Open();
 
            // Création de la commande
            IDbCommand command = new System.Data.SqlClient.SqlCommand("SELECT COUNT(1) FROM sysobjects", ((System.Data.SqlClient.SqlConnection)_Connexion));
            command.CommandTimeout = 1200;
            command.CommandType = CommandType.Text;
 
            // Exécution de la commande
            int result = command.ExecuteNonQuery();
             
            // Fermeture de connexion
            _Connexion.Close();
        }
 
// Le bouton 2 tente de dropper la base TEST_JU2 dont on peut la validité avec le bouton 1
private void button2_Click(object sender, EventArgs e)
        {
            // Création de la connexion
            IDbConnection _Connexion2 = new System.Data.SqlClient.SqlConnection("Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=XXX;" );
             
            // Ouverture de connexion    
            _Connexion2.Open();
 
            // Création de la commande
            IDbCommand command = new System.Data.SqlClient.SqlCommand("drop database TEST_JU2", ((System.Data.SqlClient.SqlConnection)_Connexion2));
            command.CommandTimeout = 1200;
            command.CommandType = CommandType.Text;
 
            // Exécution de la commande
            int result = command.ExecuteNonQuery();
 
            // Fermeture de connexion
            _Connexion2.Close();
        }
 
 
Si je clique sur le bouton 2 seulement, tout fonctionne. Si je le clique sur le bouton 2 après avoir cliqué sur le bouton 1, il met le message d'erreur "Impossible de supprimer le base de données 'TEST_JU2', parce qu'il est présentement utilisé." (avec une faute de français en prime mais la n'est pas le sujet ;) )
 
bref il doit resté une connexion active, ouverte ou je ne sais pas trop. J'ai essayé de faire:
_Connexion.Dispose();
_Connexion = null;
command.Dispose();
command = null;
Même en mettant le code du bouton 1, un Dispose(); (qui est censé virer toute les ressources utilisées) puis le code du bouton 2, cela ne fonctionne pas.
 
Si quelqu'un à une idée de la source précise du problème et voir même d'une solution pour corriger le problème, mais dejàa si je connais le problème ça serait bien :D
 
Merci d'avance,
 
Vdm


Message édité par vendeeman le 28-02-2007 à 16:36:55
Reply

Marsh Posté le 28-02-2007 à 10:29:25   

Reply

Marsh Posté le 28-02-2007 à 12:30:44    

et avec using, ça donne quoi ?

Reply

Marsh Posté le 28-02-2007 à 13:35:08    

idem, j'ai déjà essayé aussi:
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Création de la connexion
            using (IDbConnection _Connexion = new System.Data.SqlClient.SqlConnection("Persist Security Info=False;User ID=sa;Initial Catalog=TEST_JU2;Data Source=DAMBRAINE-J;" ))
            {
                // Ouverture de connexion
                _Connexion.Open();
 
                // Création de la commande
                IDbCommand command = new System.Data.SqlClient.SqlCommand("SELECT COUNT(1) FROM sysobjects", ((System.Data.SqlClient.SqlConnection)_Connexion));
                command.CommandTimeout = 1200;
                command.CommandType = CommandType.Text;
 
                // Exécution de la commande
                int result = command.ExecuteNonQuery();
 
                // Fermeture de connexion
                _Connexion.Close();
            }
        }
 
Même problème... d'autres idées? :)

Reply

Marsh Posté le 28-02-2007 à 15:37:21    

J' ai bien peur que le problème se situe plus coté SQL server, je me souvient d'avoir eu ce genre de pb il y a qques temps pour restaurer des sauvegardes de manière logiciel (en C#). J'avais trouvé une solution en lancant un script SQL qui tuait toutes les connexions à la base en question avant de pouvoir la restaurer


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 28-02-2007 à 15:44:02    

ok et pensez vous que l'utilisation de bibliotheques différentes de celles du framework puisse arranger les choses. J'ai entendu parler de bibliothèques IBM ou autres qui peut etre gèrent de problème... Si vous avez des avis sur la questions n'hésitez pas.

Reply

Marsh Posté le 28-02-2007 à 16:39:55    

Solution en haut du post, merci à tous :)

Reply

Marsh Posté le 28-02-2007 à 17:09:28    

:jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed