1

J'utilise VS 2008 pour générer une définition de rapport Reporting Services. Le problème est que chaque fois que j'essaie de charger une définition de rapport à partir d'un flux, j'obtiens une erreur.Génération de définition de rapport VS 2008 Reporting Services

J'ai le code suivant:

var loaded = XDocument.Load(filePath); 
LocalReport ret = new LocalReport(); 
using (var stream = new MemoryStream()) 
{ 
    var writer = new StreamWriter(stream); 
    loaded.Save(writer); 
    var ret = new LocalReport(); 
    ret.LoadReportDefinition(stream); 

    var r= ret.GetParameters(); 
} 

Lorsque la dernière ligne est en cours d'exécution, il jette LocalProcessingException avec le texte followinf:

{"The report definition is not valid. Details: O elemento raiz está em falta."} 

Les détails se traduisent par "élément racine manquant".

Qu'est-ce qui pourrait ne pas fonctionner?

Modifier: La définition XML est correcte. Le problème se situe quelque part après le chargement de la définition.

Répondre

0

Avez-vous essayé d'enregistrer le MemoryStream dans un fichier séparé et de le comparer à l'original?

+0

Oui et le fichier est exactement le même. C'est pourquoi je ne comprends pas. – Megacan

+0

Ça te dérange de partager le fichier? 'LoadReportDefinition' fonctionne généralement bien, je n'ai jamais entendu parler de problèmes avec ça. Il est possible que le fichier comporte une mise en forme légèrement incorrecte qui le perturbe. –

+0

J'ai résolu le problème en créant un fichier temporaire et en le chargeant à la place. Voici le fichier: http://www.megaupload.com/?d=I9MJKZTF – Megacan

2

Vous devez réinitialiser le flux à la position 0 avant de le relire. Sinon, LoadReportDefinition commencera à lire à la fin du flux.

var loaded = XDocument.Load(filePath); 
LocalReport ret = new LocalReport(); 
using (var stream = new MemoryStream()) 
{ 
    var writer = new StreamWriter(stream); 
    loaded.Save(writer); 
    writer.Close(); 
    writer.Position = 0; 
    var ret = new LocalReport(); 
    ret.LoadReportDefinition(stream); 

    var r= ret.GetParameters(); 
} 

Voir CreateMemoryStream() sur this page

+0

Tks pour la réponse. Je n'ai pas touché à ce projet depuis un moment, mais quand j'aurai l'occasion, j'essaierai. – Megacan

+0

Merci, cela a résolu le même problème pour moi. – DanDan

Questions connexes