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 :
Mes Questions :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.
- 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); } }
Partager