DataSet + Compatibilité ascendante

DataSet + Compatibilité ascendante - C#/.NET managed - Programmation

Marsh Posté le 16-08-2007 à 14:36:11    

Bonjour,
 
Je travaille actuelement sur une appli cliente et je suis ammener a recuperer un System.byte[] qui n'est autre qu'un DataSet typé.
 
Pour vous donner une image voila la facon dont esttransformer coté serveur ce DataSet typé :
 

Code :
  1. DataSetLambda ds = new DataSetLambda();
  2. MemoryStream ms = new MemoryStream();
  3. ds.WriteXml(ms);
  4. ms.ToArray();


 
Je convertit donc coté client mon dataset de cette facon :
 

Code :
  1. MemoryStream ms = new MemoryStream(array);
  2. DataSetLambda dsTmp = new DataSetLambda();
  3. dsTmp.ReadXml(ms);


 
Le problème est simple, ce DataSet a évoluer dans sa structure et le client sur lequel je travaille doit etre compatible avec des anciennes version de ce DataSet.
 
Que me conseillez vous ?

Reply

Marsh Posté le 16-08-2007 à 14:36:11   

Reply

Marsh Posté le 16-08-2007 à 14:56:46    

Une surcharge de WriteXml et ReadXml ton objet DataSet qui prend en paramètre la version du format des données reçues en paramètre (ou alors le détecte automatiquement, à toi de voir ce qui est faisable).
Ensuite, en fonction d'une méthode private "OldLoader()" dans ta class, tu vas pouvoir prendre des décisions pour chaque élément modifié.
 
Genre, mettons que ton truc contienne un flux XML, avant tu recevais dans la version 1 : "age (int)" et maintenant dans la version 2 c'est un "birthday (datetime)" tu vas pouvoir faire ça dans ton OldLoader() :
 

Code :
  1. void OldLoader(int version, XmlDocument dom)
  2. {
  3.    Datetime birthday;
  4.  
  5.    switch (version) {
  6.        case 1:
  7.                int age = int.Parse(dom.DocumentElement.SelectSingleNode("age" ).Value);
  8.                birthday = Datetime.Now.AddYear(-age);
  9.                break;
  10.        case 2:
  11.                birthday = Datetime.Parse(dom.DocumentElement.SelectSingleNode("birthday" ).Value);
  12.                break;
  13.        DEFAULT :
  14.                throw new Exception(string.Format("Version non supportée : {0}", version));
  15.    }
  16. }


Message édité par MagicBuzz le 16-08-2007 à 14:58:50
Reply

Marsh Posté le 16-08-2007 à 15:03:21    

Merci de ta réponse :)
 
je vais potasser et méditer tout cela ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed