Bonjour,

Nous utilisons un modèle de développement en couches comportement des Datasets fortement typés, des table adapteurs (les 2 créés à l'aide du designer VS 2005), et des objets métier, DAL et BLL, selon l'exemple qui suit.

De temps à autres nous obtenons des exceptions dont je n'arrive pas à trouver la cause :

Message: ExecuteReader nécessite une connexion ouverte et disponible. L'état actuel de la connexion est en cours de connexion.

Message: ExecuteReader nécessite une connexion ouverte et disponible. L'état actuel de la connexion est ouvert.
Mes Questions :
- Pouvez-vous me dire comment faire pour corriger ces exceptions ? (puisque je ne gère pas la connexion à la base de données, et le fait de ne pas la fermer me gène un peu) ?
- Est-ce que j'oublie quelque chose dans la procédure ?

- Doit-on créer un objet de connexion et l'utiliser lorsqu'on utilise les procédures stockées du Dataset (je pensais que ça gérait automatiquement . ).
Est
- Est t'il conseillé de faire un dispose des datatable après chaque utilisation ?


Merci beaucoup.


Voici un exemple

Code : 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
62
63
64

Instance statique de  l’objet DAO
        static private  objetDAO instance = null;
        static public  objetDAO Instance
        {
            get
            {
                if (instance == null)
                    instance = new objetDAO ();
                return instance;
            }
        }

Table Adapter 
        objetTA objetTA;
        protected ObjetTA ObjetTA
        {
           get
           {
                if (objetTA == null)
                {
                    objetTA = new ObjetTA ();
                }
                return objetTA;
            }
         }







ex de procédure  dans Objet DAL

public List< MonObjet > Getobjets(Byte Param1)    {

             List< MonObjet > result = new List< MonObjet >();
             dsMonObjet.MonObjetDataTable oTable = ObjetTA.SelectMonObjet(Param1);

             foreach (dsMonObjet. MonObjetRow oRow in oTable.Rows)
             {
// la fonction crée une instance de l’objet metier et  
//lui donne ses propriés du genre monObjet.propriete1 = // oRow.propriete1
                 result.Add(CreateMonObjetEntity(oRow));
             }
             oTable.Dispose();
             return result;
         }

Objet BLL
public List< MonObjet > Getobjets (byte Param1)
        {
            try
            {
//instance de l’objet BLL
return BusinessProvider.MonObjet.Getobjets (Param1);
            }
            catch (Exception e)
            {
                throw new CustomException("… !", e);
            }
        }