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

C# Discussion :

Charger une table SQL Server avec un fichier XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut Charger une table SQL Server avec un fichier XML
    Bonjour,

    Comme l'indique le titre je cherche à faire un programme pour remplir une table (déjà créée) d'une base de données à partir d'un fichier XML. Cela ne me semble pas compliqué dans l'absolu mais je suis débutant autant en .NET qu'en traitement de fichiers XML.

    La structure du fichier XML est la suivante :
    <Element>
    <NumeroElement>476</NumeroElement>
    <Info1>358</Info1>
    <Info2>4012</Info2>
    <Code1>
    <Code>OK</Code>
    <Date1>2017.06.30 16:45</Date1>
    </Code1>
    <Code2>
    <Code>OK</Code>
    <Date1>2017.06.30 12:40</Date1>
    </Code2>
    <Code3>
    <STATUT>XX</STATUT>
    <Date2>2017.06.22 17:12</Date2>
    <Date3>2017.06.30 12:40</Date3>
    <LOT>Lot1</LOT>
    </Code3>
    </Element>

    Sachant qu'il peut y avoir plusieurs éléments.

    Les colonnes de la table sont les suivantes :
    NumeroElement
    Info1
    Info2
    Code_1
    Date1_1
    Code_2
    Date1_2
    Statut_3
    Date2_3
    Date3_3
    Lot_3

    J'ai déjà cherché un peu sur MSDN mais il y a apparemment plusieurs façons différentes de lire les fichiers XML et je n'ai pas su déterminer laquelle était la plus adaptée, ni comment préparer puis insérer les données dans la table.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Pour lire le XML, le plus simple dans ton cas serait d'utiliser la sérialisation.
    Ainsi, tu pourra réutiliser la classe Element pour la suite.
    Regarde du coté de XmlSerializer et de sa méthode Deserialize()


    Pour l'insertion en base de données, cela dépends du type de base de données.
    Il a falloir préciser (SQL Server, Oracle, Access, MySQL, ...).

  3. #3
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Merci pour ta réponse, j'ai en effet oublié de préciser que la base de donnée est sur SQL Server.

    J'ai essayé Deserialize et pour l'instant ça me donne "Il existe une erreur dans le document XML (0, 0)."
    Je me dis qu'il est possible que je n'aie pas bien déclaré la classe par rapport à la structure du fichier XML, mais comment faire pour les noeuds du "niveau 2" (Code1/Code ou Code2/Code par exemple) puisque les noms des champs peuvent être les même ? A savoir, le but est de ne pas modifier le fichier XML.

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Plusieurs possibilités.

    La première est effectivement d'utiliser la désérialisation. C'est a priori la voie que tu as choisi. Dans ce cas, montre nous comment tu déclares ta classe.

    Une deuxième possibilité, c'est d'utiliser une procédure stockée du côté de SQL Server. SQL Server permet de manipuler facilement du XML, et insérer directement un enregistrement dans une table :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO table(col_1, col2)
    SELECT @Xml.value('(/value1/text())[1]', 'VARCHAR(50)'), 
           @Xml.value('(/value2/text())[1]', 'INT'),
    @Xml est une variable de type XML.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    J'ai trouvé mon problème : pour la structure que j'ai donnée plus haut j'arrive à déclarer la classe et faire la désérialisation, le problème arrive quand il y a plusieurs éléments :

    <Elements>
    <Element>
    ...
    </Element>
    <Element>
    ...
    </Element>
    </Elements>

    J'ai lu que la technique la plus simple à utiliser dans ce cas est d'utiliser une List<>, le problème est que je travaille sur la version 1.1 du Framework .Net, qui ne dispose pas des List<>. Vous avez une autre solution ?

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Dans le Framework 1.1, il doit exister la ArrayList.
    Tu devrait pouvoir déclarer un propriété Elements de type ArrayList.

    Je crois bien que ceci pourrait t'intéresser :
    https://www.codeproject.com/Articles...-serialization

Discussions similaires

  1. [Débutant] Mettre a jour une table SQL server avec un datagridview
    Par gilles_906 dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/05/2015, 02h53
  2. Importer fichier excel 2003 dans une table SQL Server
    Par fainch dans le forum Développement
    Réponses: 6
    Dernier message: 08/12/2011, 22h59
  3. [AC-2007] Comment lier une partie d'une Table Sql Server avec une table Access
    Par mirage3000 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/09/2011, 03h59
  4. Réponses: 0
    Dernier message: 30/03/2011, 10h10
  5. Réponses: 3
    Dernier message: 20/08/2010, 21h48

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