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 :

Serialize stream to Datatable


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Serialize stream to Datatable
    Bonjour,

    Je travaille sous sharepoint

    Je suis en train de développer un module qui permet de convertir des flux de Stream en Datatable

    Voici le code que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     private DataTable StreamToDatatable(Stream stream)
            {
                DataTable dt = new DataTable();
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, dt);
     
                return dt;
            }
    Le paramètre d'entrée 'stream' est initialisé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     datatable tbl_TP = StreamToDatatable(properties.ListItem.File.OpenBinaryStream());
    Mais je sais pas pourquoi, la datatable dt est toujours vide

    La sérialisation ne fonctionne pas

    Auriez-vous une piste à me donner ?

    Merci

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tout à fait normal. Tu créés un datatable, que tu sérialises dans le Stream avant de renvoyer la datatable. Du coup, la datatable est vide.

    Ton code écrit dans le Stream. Hors, ce que tu veux faire, c'est le contraire, c'est-à-dire le lire. Il faut que tu appelles BinaryFormatter.Deserialize en lui passant le Stream. Cela te retourne un objet que tu dois caster (ici, en Datatable). Et tu n'as pas besoin de créer de Datatable. C'est la désérialisation qui va le faire.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     private DataTable StreamToDatatable(Stream stream)
    {
       IFormatter formatter = new BinaryFormatter();
       return formatter.Deserialize(stream) as DataTable;
    }
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Bonjour François,

    Merci de ta réponse

    J'ai appliqué et tes recommandations et j'ai fait le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    private DataTable StreamToDatatable(SPFile content)
     { 
                BinaryFormatter bf = new BinaryFormatter();
                obj = (DataTable)bf.Deserialize(content.OpenBinaryStream());
     
                return obj;
     }
    SPFile est une propriété sharepoint. Elle représente le fichier uploadé

    Et j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le flux d'entrée n'est pas un format binaire valide
    Auriez-vous une solution ?

    Merci d'avance

  4. #4
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    D'où provient le fichier uploadé ? Que contient-il ?

    Car j'ai l'impression que tu essaies, comme par magie, de convertir un fichier en datatable. Tu ne peux désérialiser un flux en datatable que si le flux en question provient de la sérialisation préalable d'un datatable.

    Si le but est de charger un fichier dans un datatable, alors l'approche suivie est complètement erronée.

    Que cherches-tu à faire ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Bonjour François,

    Le fichier uploadé provient d'un utilisateur et c'est un fichier texte.

    Je pensais qu'en sérialisant un Stream, je pouvais le convertir aisément en DataTable.

    Mais vu tes questions, je pense que je me suis fourvoyé

    Ce que je veux faire, c'est ouvrir le fichier en binaire et mettre toutes les valeurs dans un DataTable

    Aurais-tu une piste pour que je puisse accomplir cette tâche ?

    Merci d'avance

  6. #6
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    En regardant la classe DataTable sur la MSDN, tu auras un exemple de comment charger des données.

    Maintenant, il te reste à récupérer les données. Sans avoir un exemple de format de ton fichier, difficile de te répondre...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  2. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  3. Réponses: 3
    Dernier message: 21/05/2003, 11h44
  4. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

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