IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Méthode gestion base de données [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut Méthode gestion base de données
    Bonjour
    Je continue ma recherche dans le domaine de VB2010 connecté à SQL Server
    Après pas mal de livres ou tutos plus ou moins décevants, je suis tombé sur un livre : MURACHS ADO.Net 4.0 Database programming with VB2010 qui m’a semblé abordable et plus complet que les autres

    C’est le seul de ceux que j’ai lu jusqu’à présent qui expose les différentes approches du problème et en signale les avantages et inconvénients
    - Datasource + Dataset : programmation simple et rapide via IDE, mais ne permettant pas tous les controles (Transaction) et pb éventuels lors de tables liées, donc selon le livre à réserver aux « prototypes » ou applications très légères
    - Architecture 3 Couches, Classes uniquement : permet tous les controls possibles mais nécessite de tout écrire en code
    - Architecture 3 Couches , Objet Datasource : permet de profiter du design graphique des interfaces + programmation des classes
    - Link : pas encore arrivé à ce niveau

    Et à ce niveau, je me pose 2 questions (dont la réponse est peut être à la suite du livre, car je n’en suis qu’à la moitié des 700 pages):
    1) Ai je bien résumé (et donc compris) les spécificités des 3 solutions
    2) Existe t il une « moulinette « permettant de générer automatiquement les commandes relativement simples mais longues et rébarbatives d’insertion, update,.. car la vue de prés de cent de lignes de code uniquement pour une commande d’update d’une table de 20 colonnes avec null .. me fait froid dans le dos :-)

    Par avance, merci encore une fois de vos conseils et commentaires
    Bertrand

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ce que tu résumes est assez vrai oui, si on découpe par classes utilisées :

    datatable/dataset : pas le plus performant, le plus simple pour les débutants, pas de code sql à taper, pas facile à modifier je pense

    dbconnection, dbcommand, dbdatareader : le dbdatareader est le plus performant pour la lecture de données, le stockage peut alors être fait dans ce qu'on veut
    certes écrire des classes est long, surtout si tu fais une requete par propriété ^^
    il est possible d'écrire du code générique qui se débrouille pour faire les requetes



    le niveau suivant c'est linq to sql (link c'est dans zelda ^^)
    ca permet d'écrire les requetes en .net en gros, je crois que la techno a été abdandonné (= c'est pas supporté par toutes les bases de données et ca n'évolue plus)

    le niveau suivant c'est les ORM, celui ce microsoft est Entity Framework, je pense que c'est ce que tu cherches
    tu coches les tables de ta base de données que tu veux utiliser dans l'appli, et il génère des centaines de lignes de code (création des classes et code pour les requetes)
    après ca se manipule en .net seulement avec linq, il y a un .save sur chaque instance qui permet de mettre à jour, un .createnew qui permet de faire des insert etc...
    en théorie ce n'est pas le plus performant, en pratique ce n'est pas forcément dérangeant, sur des petites bases de données la différence ne se voit pas à l'oeil nu
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Bonjour Pol63 et merci de ta réponse !
    cela m'éclaircit un peu les idées :
    - j'ai testé la 1ère méthode (Dataset) mais dès qu'on fait une modif (ajout d'un champ dans la requête, renommage du dataset,..) on a toutes les chances de tout perdre avec ou sans message préalable
    - je pense (??) que la solution Entity Framework n'est pas accessible depuis ma version VB2010 Express
    - me reste donc la solution du code, mais les exemples que j'ai vu (voir image ci jointe) me font peur : le code pour la fonction update correspondante fait plus de 140 lignes et j'ai beaucoup de tables à gérer (elle sont simples mais nombreuses)

    Donc en pratique, quand on veut faire propre et efficace, est ce qu'on :

    1) crée "à la main" une classe par insert/update/delete/select pour chaque table comme sur l'image jointe ?
    2) utilise une routine qui crée la classe ou requête à la volée ?
    3) utilise une moulinette genre celles trouvées sur le Net ?
    - http://www.pureobjects.com/dbCode.aspx
    - http://www.codeproject.com/Articles/...tor-for-VB-NET --> pas essayé
    - http://www.codeproject.com/Articles/...Helper-v-2-0-0 --> pas réussi à le lancer

    Merci encore
    Bertrand
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    En effet, EF doit être dispo sur les versions payantes de vs

    vos 3 possibilités sont bonnes, ca dépend du projet
    pour 4 classes on code à la main
    pour plus, soit on fait une moulinette qui créé les classes et le code associé, soit on fait une classe qui sait écrire les requetes
    .net permet de faire de la réflection, donc par exemple code de trouver les propriétés d'une classe et leur type, si au passage on rajouter un attribut on peut faire une recherche sur les propriétés ayant cet attribut peso, laissant la possibilité de faire des propriétés autres qui ne sont pas en base
    après un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim s as string = "INSERT INTO [" & attribut de classe.nomtable & "] ("
    for each property in classe
      s &= "[" & property.name & "], "
    next
    pareil pour le values avec @ devant puis créer des parameters
    enfin c'est dans les grandes lignes, car il faut gérer les nullables (pour infos il y a des types par valeurs nullables en .net : dim a as boolean? plutot que dim a as boolean)
    à partir de là vous pouvez faire une classe ayant ce code, une méthode save, une méthode insert, une méthode delete, avec du code générique et inspection par reflexion (et 2 attributs), puis faire inherits sur toutes les classes de données que vous avez
    et pour généré ces classes vous pouvez faire un petit exe qui inspecte les tables et génère le code

    après il y a question des relations, dans une table on a IdCleExterne as long, en .net on préfère avoir ObjetExterne as autreclasse
    par contre ca pose la question de "quoi charger", ou faire de l'initialisation tardive, enfin tout ce que EF sait faire


    sinon il y a NHibernate je crois, ca peut peut-etre fonctionner sur la version express
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re
    Je dois avoir plus de 110 tables, soit environ 440 requêtes à écrire :-(
    La plupart de ces tables sont basiques (genre ID, Nom, Abréviation) ou tables de jonction
    Je crois , et comprends tout à fait, que ce genre de moulinette fait partie du savoir faire de chaque programmeur, c'est pourquoi on n'en trouve pas d'exemples !
    Mais je ne m'en sens pas encore capable (il faut que je relise pour la nième fois le cours sur les classes:-), mais je vais essayer pour au moins les + simples

    J' ai essayé "Luna" à http://www.diegolunadei.it/luna/
    par contre, je ne suis pas sûr que le code soit optimisé :
    est ce que par exemple c'est la solution la plus rapide pour lire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while myReader.Read
    	Dim classe as new Matable
    	if not myReader("TBP_ID") is DBNull.Value then classe.TBP_ID = myReader("TBP_ID")
    	if not myReader("TBP_CODE") is DBNull.Value then classe.TBP_CODE = myReader("TBP_CODE")
    Je vais regarder coté NHibernate..
    Il faut aussi que je regarde pour les relations entres tables / classes
    Bref, pas simple !!
    Bertrand

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re
    J'essaie de réfléchir à un "générateur" simpliste

    Par exemple, j'ai une table Civilités (Monsieur, Madame,..)
    Elle s'appelle TR_CIVILITE_CIV (pourquoi faire simple ?..)
    Elles a 3 champs CIV_ID, CIV_NOM et CIV_ABREV

    Je crée donc une classe Civilite avec les propriétés ID, Nom et Abreviation

    Pour générer ma requête j'ai besoin du nom de table, des nom, type, nullable des champs dans la table

    Dois je ajouter ces propriétés dans la même classe
    Civilite.NomTable = TR_CIVILITE_CIV
    Civilite.ID.NomdanslaTable = CIV_ID
    Civilite.ID.Type = integer
    Civilite.Nom.NomdanslaTable = CIV_NOM
    Civilite.Nom.Type = string

    ou créer une classe Table et une classe Colonne reprenant pour chaque table dans la BDD :
    NomTable
    NomColonne1
    TypeColonne1

    Merci encore
    Bertrand

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Je retire ma dernière question :-)
    Je vais d'abord essayer de charger les infos de la BDD sur le serveur et en extraire des requêtes simples
    Pour la partie relations ..
    Bertrand

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Juste pour préciser que contrairement à ce que je pensais LINQ to SQL est disponible sur la version VB 2010 Express
    Cordialement
    Bertrand

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Eclipse + gestion base de données
    Par fanette dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 04/11/2018, 19h41
  2. Problème gestion base de donnés
    Par chtixcel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2009, 22h07
  3. Réponses: 5
    Dernier message: 05/11/2008, 08h10
  4. Gestion Base de Données
    Par deeperpaul dans le forum Excel
    Réponses: 1
    Dernier message: 13/12/2007, 20h51
  5. Réponses: 0
    Dernier message: 16/11/2007, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo