none
compteurs et données relationnelles RRS feed

  • Question

  • Bonjour, 

    Je suis en train de me mettre à ADO.NET. Mon premier code consiste à importer dans une base Access un fichier csv 

    Dans le csv, nous avons deux colonnes, un parent et un enfant sachant que la relation est n,n c'est à dire qu'on enfant peut avoir plusieurs parents et un parent peut avoir plusieurs enfants. 

    Dans ma base de données, j'ai donc trois tables: 
    - Enfant: 
    enfant_id 
    enfant_libelle 

    - Parent: 
    parent_id 
    parent_libelle 

    - Relation 
    enfant_id 
    parent_id 

    Coté code c#, j'ai un dataset dans lequel je mets chacune des tables de la base. Je remplis ensuite le dataset en mode déconnecté et je mets à jour la base à la fin. 

    Comme je ne connais pas d'avance l'état des numéroauto pour les id, dans les datatable de mon dataset, j'ai défini les AutoIncrementSeed et AutoIncrementStep à -1. 

    Je parcours tout mon csv et pour chaque ligne 
    - si l'enfant est connu, je récupère son id, sinon je le crée 
    - si le parent est connu, je récupère son id, sinon je le crée
    - je crée une relation entre les deux. 

    Donc tous les enfants et parents créés sont numérotés avec des id négatifs 

    Lorsque je mets la base à jour, les nouveaux enfants et parents remontent correctement en base mais il existe une mécanique dans ADO.NET qui fait que ma datatable de relation, avant d'être flushée en base, devrait se mettre à jour en fonction des nouveaux id attribués par la base aux nouveaux parents et enfants. 

    Ça ne fonctionne pas. 

    Voici un extrait d'un ouvrage que j'utilise pour découvrir ADO.NET: 
    "Comment appliquer les nouvelles valeurs de compteur aux lignes de [relation] en attente ? En fait vous n'en avez pas besoin. Laissez ADO.NET faire le travail au travers de l'objet DataRow. Par défaut, cet objet transmet les modifications en cascade. Si vous avez défini une DataRow entre les objets DataTable [relation] et [enfants] dans votre DataSet, dès que vous avez soumis les données des nouveaux enfants, la DataRow transmets en cascade les nouvelles valeurs à la DataTable [relation]" 

    Quelqu'un connait il cette mécanique ? 

    Dans mon dataset j'ai défini des relations entre les datatables mais je ne vois pas comment définir une datarow entre les datatables..... 

    Un grand merci pour votre aide
    mercredi 23 juin 2010 13:49

Réponses

  • Bonjour,

    La mise à jour des identifiants se fait en cascade de manière automatique (au niveau du DataSet) si vous l'avez défini. Par contre, lors de l'insertion des données via un DbDataAdapter, c'est à vous de récupérer le dernier identifiant ajouté et de l'injecter dans le DataSet. On peut le faire automatiquement (en SQL Server), mais pour cela il vous faudra redéfinir la commande INSERT de votre DbDataAdapter.

    C'est dommage d'apprendre une technologie obsolète (DataSet + DataAdapter), alors qu'il existe des technologies purement objet permettant de modéliser des relations n-n et de s'affranchir de cette problématique d'identifiant automatiquement (c.f. Entity Framework).

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 23 juin 2010 19:04
    Modérateur

Toutes les réponses

  • Bonjour,

    La mise à jour des identifiants se fait en cascade de manière automatique (au niveau du DataSet) si vous l'avez défini. Par contre, lors de l'insertion des données via un DbDataAdapter, c'est à vous de récupérer le dernier identifiant ajouté et de l'injecter dans le DataSet. On peut le faire automatiquement (en SQL Server), mais pour cela il vous faudra redéfinir la commande INSERT de votre DbDataAdapter.

    C'est dommage d'apprendre une technologie obsolète (DataSet + DataAdapter), alors qu'il existe des technologies purement objet permettant de modéliser des relations n-n et de s'affranchir de cette problématique d'identifiant automatiquement (c.f. Entity Framework).

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 23 juin 2010 19:04
    Modérateur
  • Bonjour,

     

    Waxman, je vous prie de nous annoncer si vous avez besoin de plusieurs informations et de marquer la réponse de M. Tourreau si elle vous a été utile.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    vendredi 25 juin 2010 08:39