5 pièce(s) jointe(s)
[C# 1.1] - Connection à la BD dans ItemDataboud
Bonjour à tous,
J'ai développé un application qui nécessite un journal multilangue. Pour commencer je vous invide donc à regarder le shéma relationnel de ma base de données Relation.jpg.
Le principe est assez simple, j'ai une table (Etiquette) qui possède la liste de toutes les étiquettes possible du système et ce dans toutes les langues. Regarder l'image Étiquette.jpg à titre de référence
La colonne CultureID spécifie la culture (fr-CA, en-CA, fr-FR, etc...) La colonne ID c'est la CLÉ identifiant l'étiquette dans le système. La dernière colonne c'est la valeur de l'étiquette pour la culture spécifiée. La valeur de l'étiquette peut contenir des paramètres variables comme {0} ou {1}, etc... Ceuxi-ci seront remplacé plus tard. Tout dépendement de la culture de l'utilisateur consultant le journal.
Maintenant regardons ce que ma table de journal contient Jounal.jpg. Prenons l'entrée #3, il y a une entrée en date du 15-11-2006 à 22h05 avec l'étiquette "USER_REMOVE_ROLE_TO_A_USER". Dans la table enfant (JournalParam il y a 3 entrées qui identifient les paramètres nécessaire à la construction d'une description d'entrée du journal.
Si je suis un utilisateur avec le ID #1 et que je désire consulter le journal entre une date précise, je lancerais la requête suivante : RequeteJournal.jpg Ce qui produirait ceci comme résultat :RequeteJournalResultat.jpg
Bref je récupère ce résultat dans un Dataset et par la suite je relance une requête pour chaque entrées à savoir s'il y a des paramètres y étant associé.
Comme par exmple, la requête de la première entrée donnerait ceci :
Code:
1 2 3 4 5
|
ID Type Valeur
4 User 2
5 Role 2
6 User 3 |
À partir de là, je vérifie le type de la valeur, si c'est "User" alors je vais lire l'utilisateur dans la base de donnés et je remplace le {0} par son nom. Si c'est un role alors je vais voir dans la base de données, je récupère le bon rôle attaché à la culture désirés et je remplace le paramètre. Si c'est un type "String" je remplace simplement par ce qui est dans la colonne valeur. Alors voilà tout ceci fonctionne bien, c'est un journal TOUT À FAIT multilangue et très intéressant.
Mais il a 2 gros défaut, il n'est pas vraiment RELATIONNEL et en ce qui à trait aux paramètres. De plus le questionnement des tables pour chaque paramètre est un processus très gourmant.
Par la suite je me suis dit que je pourrait simplement récupérer en une requête et seulement questionner la base de données dans le ItemDataBound de mon datagrid mais hélas, si j'ai 2000 items et 50 items par pages, cela fait 50 connections à la BD à chaque chargement de page. Par conséquent, il serait possible d'ouvrir une connection à la BD lors du OnLoad de la page mais quand la FERMER ? Il n'y a pas de OnEndDataBound.
Vous avez une autre idée pour gérer un journal multilange ?
Merci à tous