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

Services Web Discussion :

Prendre en compte les DbNull lors d'une sérialisation d'un Dataset ?


Sujet :

Services Web

  1. #1
    Membre régulier Avatar de SetaSensei
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 104
    Points
    104
    Par défaut Prendre en compte les DbNull lors d'une sérialisation d'un Dataset ?
    Bonjour,

    J'ai une application Web d'un côté (asp.net 3.5) et des webservices de l'autre (aussi asp.net 3.5) qui interrogent une BDD en Sql Server 2005.

    Afin de passer les informations entre les deux, je me base sur des DataSet que je sérialise et désérialise lors des transferts.

    Mon problème est le suivant :
    Lorsque je transfère et désérialise mes données, je perds mes informations en DBNull. Pire : sur des données en int, il me défini la colonne en auto-increment.

    Voici mes codes de sérialization et dé-sérialisation :
    Sérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            public static XmlDocument GetXmlDocumentFromDataSet(DataSet dS)
            {
                StringBuilder build = new StringBuilder();
                XmlWriter xWrite = XmlWriter.Create(build);
     
                dS.WriteXml(xWrite, XmlWriteMode.WriteSchema);
     
                XmlDocument xDocOut = new XmlDocument();
                xDocOut.LoadXml(build.ToString());
     
                return xDocOut;
            }
    Dé-sérialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            public static DataSet GetDataSetFromXmlNode(XmlNode xNode)
            {
                DataSet ds = new DataSet();
                ds.ReadXml(new XmlNodeReader(xNode));
                return ds;
            }
    Pour information, voici un schéma XML renvoyé depuis le webservice qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
        <xs:element name="root" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="Associer">
                <xs:complexType>
    				<...>
                    <xs:element name="colAutoSelectTypeId" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" minOccurs="0"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
    J'ai du coup comme retour des valeurs fausses pour ma colonne "colAutoSelectTypeId" qui peut être à DbNull.

    Sachant que je ne peux pas créer un objet particulier pour chaque retour de ws vu que je dois faire aussi générique que possible (bibliothèque commune à l'équipe), que c'est moi qui la développe et elle n'est pas encore en production donc je peux changer le mode de fonctionnement de celle-ci.

    Que puis-je faire pour prendre en compte DbNull (en sérialization ou désérialization, peu importe) ?


    Merci !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut SeteSensei,

    Si je comprends, tu as un problème d'interprétation de données en sérialisant et en désérialisant!

    As-tu essayer de lié ton objet dataset à un schéma définit comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dataset.ReadXmlSchema(...)
    Cédric

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Je comprends pas trop pourquoi vous souhaitez sérialiser un objet dataset...

    Je bosse enormément avec les dataset dans mes webservices avec à peu près la même architecture que vous et je n'ai aucun souci.

    Par exemple dans mon web service j'ai des méthodes du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public function GetAllFournisseur() as dataset
    Et depuis mon interface client je récupére bien un dataset avec tout mes fournisseurs sans perte d'info.

    Bon coding
    @+

Discussions similaires

  1. Boucle for sur une variable sans prendre en compte les espaces
    Par laurentze dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/03/2012, 11h15
  2. Réponses: 1
    Dernier message: 25/11/2011, 17h58
  3. Réponses: 7
    Dernier message: 16/11/2011, 14h18
  4. Réponses: 3
    Dernier message: 16/12/2010, 09h03
  5. Réponses: 4
    Dernier message: 13/04/2007, 17h32

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