Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1565 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1521418
vendeeman
Posté le 28-02-2007 à 10:29:25  profilanswer
 

/****************************************************************************/
 
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
mood
Publicité
Posté le 28-02-2007 à 10:29:25  profilanswer
 

n°1521610
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-02-2007 à 12:30:44  profilanswer
 

et avec using, ça donne quoi ?

n°1521646
vendeeman
Posté le 28-02-2007 à 13:35:08  profilanswer
 

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? :)

n°1521772
ixemul
Nan mais sans blague ! ⚡
Posté le 28-02-2007 à 15:37:21  profilanswer
 

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
n°1521775
vendeeman
Posté le 28-02-2007 à 15:44:02  profilanswer
 

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.

n°1521838
vendeeman
Posté le 28-02-2007 à 16:39:55  profilanswer
 

Solution en haut du post, merci à tous :)

n°1521870
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-02-2007 à 17:09:28  profilanswer
 

:jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
[résolu] transfert de fichier php[Résolu] dynamic classpath et plugins
[RESOLU]comment calculer la distance entre 2 villes (code postaux?) ??fork et SIGCHLD (RESOLU)
[RESOLU]Url Rewriting[Architecture de l'ordi] Taille bus d'adresses, (Résolu)
Connexion à un webservice via HTTPS[Résolu] [VBS] Mappage réseaux selon le groupe de l'utilisateur AD
Logiciel de programmation en paire - Résolu[Résolu][VBA ACCESS] LIKE + * ou % ?
Plus de sujets relatifs à : [C#][.net][RESOLU] Prob fermeture de connexion: bug .NET ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR