none
DataSet typé - Comparaison avec le schéma en base de données RRS feed

  • Question

  • Bonjour,

     

    Travaillant avec des datasets typés pour un projet, je suis aujourd'hui confronté à un problème récurrent.

    Disons que mes datasets typés sont liés avec des tables de ma base de données. Le problème est que quand le schéma de la base de données change (une colonne qui change de nom, de type ou est supprimée), mes DataSets/TableAdapter commencent à lancer des exceptions lors de l'exécution, ce qui est logique.

     

    Au niveau où j'en suis, ça me prendrait facilement une demi-journée pour vérifier que chaque requête SQL générée au travers de mes DataSets typés est valide.

     

    Apparement, Visual Studio (2005) ne dispose pas d'outil pour vérifier la validité des requêtes SQL derrière le dataset typé... Est-ce que je me trompe ? Ou bien existe-t-il un outil permettant de tester cette validité ?

     

    Attention, je parle bien de comparaison et non de mettre à jour mes DataSets à jour sans que je puisse vérifier les changements au préalable.

     

    Merci d'avance,

     

    Jérôme

    lundi 18 février 2008 15:44

Réponses

  • Bonjour,

    Il suffit d'instancier un DataTableTypé :

    MonDataSet.MonDataTableTypé dtType;
    dtType = new MonDataSet.MonDataTableTypé();
    Ensuite il suffit de récupérer le "schéma" dans un DataTable non typé

    DataTable dt;
    dt = new DataTable();
    ... //Exécuter la requete : SELECT * FROM MaTable WHERE 0 = 1
    MonDataAdpater.Fill(dt);
    

    Vous disposez ainsi de 2 DataTable où il suffit de comparer les colonnes entre elles...
    Sous le .NET Framework 3.5, Linq To Object aide les gros fainéant :

    Par exemple :
    Les colonnes de la BD qui ne sont pas dans le DataSet typé :

    dt.Columns.Except(dt.Columns);
    

    Et ainsi de suite...

    Cordialement
    Gilles TOURREAU - MVP C#
    vendredi 24 avril 2009 19:39
    Modérateur

Toutes les réponses

  • Bonjour Jérôme,

    Je souhaite mettre en place un système de verification entre le shéma du DataSet et le fichier physique de base de donnée comme tu le décris dans le sujet.

    As tu trouver une solution ?

    Merci d'avance
    mercredi 25 mars 2009 09:46
  • Bonjour,

    Il suffit d'instancier un DataTableTypé :

    MonDataSet.MonDataTableTypé dtType;
    dtType = new MonDataSet.MonDataTableTypé();
    Ensuite il suffit de récupérer le "schéma" dans un DataTable non typé

    DataTable dt;
    dt = new DataTable();
    ... //Exécuter la requete : SELECT * FROM MaTable WHERE 0 = 1
    MonDataAdpater.Fill(dt);
    

    Vous disposez ainsi de 2 DataTable où il suffit de comparer les colonnes entre elles...
    Sous le .NET Framework 3.5, Linq To Object aide les gros fainéant :

    Par exemple :
    Les colonnes de la BD qui ne sont pas dans le DataSet typé :

    dt.Columns.Except(dt.Columns);
    

    Et ainsi de suite...

    Cordialement
    Gilles TOURREAU - MVP C#
    vendredi 24 avril 2009 19:39
    Modérateur