Bonjour à tous
Je suis en train d'essayer de créer un script qui a pour but de parcourir toute les lignes d'une table, de faire une vérification sur une partie de ces données et selon le résultat de faire une insertion dans une autre table.
Ce qu'il y a c'est qu'au bout d'une centaine (grand maximum) d'opérations réussies, je me mange une exceptionJe comprends bien qu'il y a un soucis et que je ne dois pas fermer correctement certaines de mes connexions à la base, donc j'ai rajouter des fermetures de connexion un peu de partout, même des inutiles je pense, du moment ou ça ne bloquait pas le fonctionnement. Et toujours la même exception.Too many users (too many database sessions active)
Donc j'aimerais que vous m'expliquiez la façon de fermer proprement les connexion à la base, car j'ai l'impression de bien le faire.
Je met mon code en entier pour ceux qui ont le temps.
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 cmClient client = new cmClient(); OdbcDataReader reader = client.ListeClients(); List<int> cliids = new List<int>(); while (reader.Read()) { int numcli = int.Parse(reader[0].ToString()); cliids.Add(numcli); } reader.Close(); client.FermerConnexion(); foreach (int numcli in cliids) { OdbcDataReader rdr = client.getPrestaInfosFor(numcli.ToString()); if (!rdr.HasRows) { client.setDefaultPrestaValues(numcli.ToString()); client.FermerConnexion(); } rdr.Close(); client.FermerConnexion(); }
Ma classe cmClient (les parties qui vous intéressent):
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 bdSAP bdd = new bdSAP(); public OdbcDataReader ListeClients() { try { string req = "MA" return bdd.Consult(req); } catch (Exception exc) { throw new Exception(exc.Message); } } } public OdbcDataReader getPrestaInfosFor(string p) { return bdd.Consult("UNE AUTRE REQUETE SELECT" ); } public void setDefaultPrestaValues(string p) { string req = ("UNE REQUETE DINSERTION"); bdd.MAJ(req); bdd.FermerConnexion(); }
et pour que vous ayez vraiment tous les éléments je met aussi la classe bdSap
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public class bdSAP { OdbcConnection Connex = new OdbcConnection(); public bdSAP() { } public void OuvrirConnexion(string user, string pass) { string chaineConnexion = "Dsn=mondsn;uid=" + user + ";pwd=" + pass; Connex = new OdbcConnection(); Connex.ConnectionString = chaineConnexion; try { Connex.Open(); } catch (Exception exc) { throw new Exception(exc.Message); } } public void FermerConnexion() { try { if (Connex != null) { Connex.Close(); Connex = null; } } catch (Exception exc) { throw new Exception(exc.Message); } } public OdbcDataReader Consult(string sql) { OuvrirConnexion("user", "mdp"); OdbcDataReader rdr; OdbcCommand cmd; cmd = new OdbcCommand(sql, Connex); rdr = cmd.ExecuteReader(); return rdr; } public void MAJ(string sql) { OuvrirConnexion("user", "mdp"); OdbcCommand cmd = new OdbcCommand(sql, Connex); cmd.ExecuteNonQuery(); FermerConnexion(); }
Je ne maîtrise pas l'intégralité du code car c'est un code que je viens tout juste de reprendre. J'attends votre aide.
Partager