Ado.net sans douleur

Soyez le premier à donner votre avis sur cette source.

Vue 8 940 fois - Téléchargée 1 337 fois


Description

L'idée est de manipuler les BDD presque sans s'en rendre compte.

Pour chaque table de la BDD on créé une Class du même nom.
Dans chaque Class on créé des propriétés aux mêmes noms que les champs.

Pour réduire le volume du code j'ai créé une Class qu'il suffit d'hériter.

Procédure (s?inspirer de la class TAB_CONTACT) :
  • Récupérer le module OLEDB
  • Créer une class du même nom que la table à gérer et hériter la Class AccessTable
  • Créer autant de propriétés qu?il existe de champs
  • Personnaliser les procédures : InitVar, InitFields, DelSubLevels, ReadFields, UpdateFields
  • Recréer les procédures New (copier/coller depuis TAB_CONTACT)
  • Optionnel : créer de nouvelles procédures personnalisées EnumRecords


Contraintes :
  • Chaque table doit comporter une clé primaire et cette clé doit s?appeler Index
  • Ne gère pas (encore ??) les jointures

Source / Exemple :


'#Gestion de la BDD
OLEDB.DataBase.Path = "c:\...\exemple.mdb"
OLEDB.DataBase.Open()
OLEDB.DataBase.Close()

'#Lister les enregistrements
Dim MyContacts As New OLEDB.Table.TAB_CONTACT
Dim iContact As List(Of Integer) = MyContacts.EnumRecords

'#Lire un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_lire)
MyContacts.Read()
Msgbox MyContacts.FirstName
Msgbox MyContacts.LastName
Msgbox MyContacts.Height

'#Supprimer un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_supprimer)
MyContacts.Delete()

'#Ajouter un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT()
MyContacts.Add()
MyContacts.FirstName = "TOTO"
MyContacts.LastName = "LULU"
MyContacts.Height = "1,75"
MyContacts.Update()

'#Modifier un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_modifier)
MyContacts.Edit()
MyContacts.FirstName = "TOTO"
MyContacts.LastName = "LULU"
MyContacts.Height = "1,75"
MyContacts.Update()

Conclusion :


Merci de me faire remonter vos remarques et idées d'amliorations.

J'envisage de créer une appli qui se chargera de créé automatiquement tout le code nécessaire en lisant dans une BDD.
Mais faute de temps je remet et je remet...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

bouv
Messages postés
1429
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
J'oubliais de préciser. J'utilise les DataRow pour affecter les valeurs aux champs en mode Add et Edit.
Cela évite les problèmes suivants :
Date : pas besoin de faire la conversion au format mm/jj/aaaa
Texte : inutile de doubler les caractères du type ' et "
Champs OLE : ils sont gérés. Passer simplement un tableau de Byte en valeur
Etc,...
PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28 -
salut Bouv,

au final tu refais LINQ mais sans la partie requête et sans la généricité... ?
http://msdn.microsoft.com/fr-fr/library/bb397926.aspx

++
aserf
Messages postés
117
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
1 juillet 2011
-
Salut,

J'ai ne pas vue ou tu a ecrit le code qui genere la class, autrement effectivement LINQ, ainsi que les dataset Type permette deja de faire ce genre de chose, autrement j'ai developper un logiciel qui fait a peu pres la meme chose, www.database2code.com, il genere des class pour chaque table, mais en ce basant sur le DataSet, de plus fonctionne pour SqlServer, Access, et MySql.

Autrement bon debut,
Séb
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Au-dessus (et à coté) de Linq, voici aussi un exellent bouquin sur le mapping objet-relationnel pour la programmation :
Programming Entity Framework
Building Data Centric Apps with the ADO.NET Entity Framework
http://oreilly.com/catalog/9780596520298
bouv
Messages postés
1429
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Merci pour vos commentaires.

PCPT>>La partie requête est gérée. Voir procédure EnumRecords dans la région Enum.
Mais pas (encore) avec les jointures et en mode très léger je te l'accorde.
En revanche pas de généricité c'est clair.

Aserf>>Je connais ton logiciel. Je l'ai essayé il y à 1 ou 2 ans. Il m'a permis de comprendre pas mal de chose sur ADO.Net en lisant le code qu'il produit.
Seulement, si mes souvenirs sont exacts, il ne tire pas profit de l'heritage et produit donc un code un peu plus lourd.

Je ne connais pas LINK mais je vais me renseigner. Merci du tuyaux.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.