none
Utilisation d'un dataset pour peupler une base de donnée RRS feed

  • Question

  • Bonsoir,

     

    Tout d'abord, veuillez m'excuser si le sujet a semble-t-il été déjà traité, mais je ne parviens pas à me sortir du problème sur lequel je me penche depuis plusieurs jours maintenant.

     

    Présentation du contexte:

    J'ai une base de données SQL (elle peut être ORACLE, MySQL, SQL Server, cela dépend de la plateforme sur laquelle mon programme est amené à évoluer) vide.

    J'ai une application, qui traite un grand nombre de données, que j'aimerai regrouper dans différentes tables, dans cette base vide (qui aura été créée spécialement pour cela).

     

    Le problème en soi:

    Est-il possible de créer des tables SQL dans cette base, en utilisant des objets DataSet et DataTable (bien plus pratiques pour manipuler les données que les simples commandes où l'on écrit nous même les requêtes) ?

    Créer un dataset à partir d'une base existante, cela ne me pose pas de problème, mais je ne parviens pas à créer des tables dans ma base, à partir de tables que je créé dans mon dataset.

     

    Cela est-il possible ?

    Si oui, par quel moyen ?

    Si non, quelle pourrait être une solution de contournement ?

     

    En vous remerciant par avance,

     

    Grom42

    vendredi 10 juin 2011 20:04

Réponses

  • A ma connaissance il n'existe pas de mécanisme tout fait. Il faudrait donc à mon avis analyser les DataTables pour créer la structure correspondante (également définir un MaxLength par exemple pour les colonnes VARCHAR). Entity Framework supporte également le modèle "Code First" où l'on crée des classes, Entity Framework générant le code SQL permettant de stocker dans une base des instances de ces classes.

    Même avec l'utilisation des DataTables, on fait à ma connaissance généralement le contraire : on a un script SQL tout fait qui crée la structure de la base et on va utiliser les DataTables pour accéder à ces données. N'est-il pas possible de créer la base au préalable ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse grom42 lundi 13 juin 2011 19:22
    dimanche 12 juin 2011 11:33
    Modérateur

Toutes les réponses

  • Bonjours

    C'est possible , vous pouver creer un progamme qui mappe tout les objects dans la dataset comme les data tabes, les data relations et les data columns en objets sql servers qui construiront par la suite votre base de donne c'est le sens contraire d'un ORM Object Relational Mapping en faite. Si vous ne parvenez pas a le faire je suis la pour vous donner un coup de main 

    Cordialement


    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    samedi 11 juin 2011 16:45
  • Bonjour,

    Ces classes sont destinées à stocker des données, pas à créer les tables. Pour créer les tables il faudrait envoyer les commandes CREATE TABLE correspondantes vers la base.

    Eventuellement préciser le problème (ma compréhension est que la base est totalement vide sans données, ni tables et que vous cherchez à y créer des tables ?)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    samedi 11 juin 2011 17:04
    Modérateur
  • Bonsoir,

     

    Merci beaucoup de vous pencher sur ma question :)

    Effectivement, je cherche à créer des tables, car ma base est initialement vide (la structure des tables est fortement dépendante du type de données que je veux traiter dans mon programme)

     

    Admettons que dans mon programme, je crée un objet DataTable possédant 3 ou 4 DataColumns. Je viens ensuite ajouter cette table à mon DataSet.

    DataSet myDataSet = new DataSet();
    DataTable myTable = new DataTable("Foo");
    
    DataColumn column1 = new DataColumn("Column1");
    column1.DataType = Type.getType("System.String");
    
    DataColumn column2 = new DataColumn("Column1");
    column2.DataType = Type.getType("System.Int32");
    
    DataColumn column3 = new DataColumn("Column1");
    column3.DataType = Type.getType("System.Boolean");
    
    myTable.Columns.Add(column1);
    myTable.Columns.Add(column2);
    myTable.Columns.Add(column3);
    
    DataColumns[] primaryKey = new DataColumns[1];
    primaryKey[0] = column2;
    myTable.PrimaryKey = primaryKey;
    
    // ici vient du code pour remplir cette table
    
    myDataSet.Tables.Add(myTables);


     

    Une fois cette étape effectuée, l'objectif est que ma base (initialement vide) comporte une table Foo, ayant 3 colonnes, avec les types correspondants (Rappel : la base peut être SQL Server, ou bien Oracle. Les types sont donc différents !)

     

    Comment procéder pour que cette table soit créée dans la base SQL ?

     

    Patrice Scribe, vous affirmez qu'il faudrait envoyer les commandes CREATE TABLE.  Pour cela, existe-t-il un moyen plus générique que l'utilisation d'une DbCommand, et l'utilisation d'une méthode ExecuteNonQuery ?

     

    Cordialement,

     

    Grom42


    samedi 11 juin 2011 22:15
  • A ma connaissance il n'existe pas de mécanisme tout fait. Il faudrait donc à mon avis analyser les DataTables pour créer la structure correspondante (également définir un MaxLength par exemple pour les colonnes VARCHAR). Entity Framework supporte également le modèle "Code First" où l'on crée des classes, Entity Framework générant le code SQL permettant de stocker dans une base des instances de ces classes.

    Même avec l'utilisation des DataTables, on fait à ma connaissance généralement le contraire : on a un script SQL tout fait qui crée la structure de la base et on va utiliser les DataTables pour accéder à ces données. N'est-il pas possible de créer la base au préalable ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse grom42 lundi 13 juin 2011 19:22
    dimanche 12 juin 2011 11:33
    Modérateur
  • Bonsoir,

     

    D'accord, donc je vais me pencher sur Entity Framework, voir si je peux essayer de sortir quelque chose de ce côté pour m'aider. :)

     

    En fait, la base n'est pas créée au préalable, car fortement dépendante des données traitées par mon application. Actuellement, mon application génère un script SQL, ou utilise des DbCommand pour venir intéragir directement avec ma base (mais c'est lourd, je dois gérer les différences de syntaxes entre les différents système de gestion de base, entre autre)

     

    Pour m'éviter cela, je pensais utiliser un objet de type DataSet, qui aurait permis de m'abstraire de cette contrainte.

     

    Je vais essayer de voir du côté d'Entity Framework, donc. Merci beaucoup pour ces pistes !

     

    Cordialement,

    Grom42

     

    lundi 13 juin 2011 19:22