Problème et question connexion base de données avec Datasets.
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 :
Citation:
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:
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);
}
} |