2010-05-21 11 views
0

J'ai un énorme problème. Jetez un oeil à cet exemple de codeMySqlConnection vraiment pas fermer

private sub FUNCTION1() 
     dim conn as new mysqlconnection(myconnstring) 
     conn.open 
     ---- do something 
     FUNCTION2() 
     ---- 
     conn.close 
end sub 

private sub FUNCTION2() 
    dim conn as new mysqlconnection(myconnstring) 
    .... 
    conn.open 
    -- do something 
    conn.close 
end sub 

Malgré je ferme toute ma connexion regulary, ils reste « ouvert » sur le serveur MySQL. Je le sais parce que j'utilise l'outil d'administration de MySQL pour vérifier combien de connexions j'ouvre "ligne par ligne" de mon code source. En fait, je reçois beaucoup de temps "utilisateur a dépassé la ressource 'max_user_connections' (valeur actuelle: 5)" Mon hoster permet SEULEMENT 5 connexion, mais je pense que si j'écris le bon code source, cela ne peut pas être un problème. Donc, ma question est: pourquoi ces connexions "putain" restent ouvertes ?? Merci d'avance!

Répondre

1

Tenir compte d'emballer vos opérations MySQLConnection dans un communiqué Using ...

Tout objet que vous instancier dans cette déclaration Using ... new seront éliminés de façon appropriée par le compilateur. Une fois que l'instruction End Using apparaît, l'objet sort de scop. Tous les objets déclarés dans le bloc Using devront être éliminés par le développeur, comme d'habitude.

Using conn As New MySqlConnection(myConnString) 
    Using cmd As New MySqlCommand("SELECT * FROM Employees", conn) 
    conn.Open() 
     Using rdr As MySqlDataReader = cmd.ExecuteReader() 
     While rdr.Read() 
      Console.WriteLine(rdr(0)) 
     End While 
     End Using 
    End Using 
End Using 

Dans ce cas, vous ne l'avez pas Capturez vos commandes et Reader dans leur propre Using, mais il vous permet de profiter du fait que tous mettent en œuvre IDisposable.

+0

salut campbell, que se passe-t-il si j'utilise le "using" statemnet seulement pour la connexion? le lecteur et la commande seront-ils éliminés après la fin de l'utilisation de la déclaration? – stighy

+0

Cette solution a résolu mes problèmes de connexion avec le connecteur mysql asp.net. – Steve

0

Essayez d'appeler conn.Dispose(), puis définissez-le sur null. Sur une autre note, ouvrez-vous également une connexion dans Function1 et Function2 car il semble que vous créez 2 connexions. Si c'est le cas, essayez d'implémenter un pattern singleton pour gérer vos connexions.

Questions connexes