2010-10-26 15 views
0

J'essaie d'utiliser la méthode ServerReport.RenderStream à partir de ASP.NET ReportViewer (2008 SP1), mais j'obtiens une exception rsStreamNotFound de la méthode. J'ai essayé les deux différentes lignes de code ci-dessous après avoir réglé les paramètres. Je suis en interface avec SQL Server 2005 et SSRS 2005. J'ai vu des articles sur un correctif pour ce problème, mais je préfèrerais vraiment ne pas avoir recours à un correctif, car je ne suis pas sûr que ça ira avec ça. Il n'y a pas trop de documentation que j'ai trouvé sur l'erreur qui estRapport ASP.NET ReportViewer Server Le résultat du rendu du rendu génère une exception

Le flux ne peut pas être trouvé. L'identificateur de flux fourni à une opération ne figure pas dans la base de données du serveur de base de données du serveur de rapports .

Code de préparation:

string mimeType; 
string encoding; 
List<ReportParameter> parameters = new List<ReportParameter>(); 
string startDateValue = Request.Form[startDate.UniqueID]; 

string endDateValue = Request.Form[endDate.UniqueID]; 
parameters.Add(new ReportParameter("Owner", "5", false)); 
parameters.Add(new ReportParameter("StartDate", startDateValue, false)); 
parameters.Add(new ReportParameter("EndDate", endDateValue, false)); 
ReportViewer1.ServerReport.SetParameters(parameters); 

Appel 1:

byte[] result = ReportViewer1.ServerReport.RenderStream("PDF", string.Empty, string.Empty, out mimeType, out encoding); 

Appel 2:

byte[] result = ReportViewer1.ServerReport.RenderStream("CSV", string.Empty, string.Empty, out mimeType, out encoding); 

Nettoyage:

Response.Clear(); 
Response.ContentType = mimeType; 
Response.ContentEncoding = System.Text.Encoding.GetEncoding(encoding); 
Response.OutputStream.Write(result, 0, result.Length); 

Des idées sur une solution? L'objectif final est d'écrire ceci au format CSV pour un téléchargement. En réalité, je serais heureux avec XML que je traduirais à la base de données du serveur CSV.report.

+0

j'ai pu contourner ce problème en utilisant à la place ServerReport.Render de RenderStream. Je ne sais pas quoi ou pourquoi le problème s'est présenté, mais Render a atteint mon objectif. – CodeMonkey1313

Répondre

0

Oui, la méthode Render fait exactement ce que je veux qu'elle fasse. J'aimerais entendre parler de quelqu'un qui a de l'expérience sur RenderStream.

2

RenderStream est utilisé pour prendre un flux existant et le traiter d'une manière différente ou rendre des ressources externes, donc Render était ce dont vous aviez besoin tout au long. La signature C# de RenderStream est

public byte[] RenderStream (
    string format, 
    string streamId, //cannot be String.Empty! 
    string deviceInfo, 
    out string mimeType, 
    out string encoding 
) 

Le second paramètre, streamId, est l'ID d'un flux existant; vous passiez String.Empty, d'où le message d'erreur de ne pas trouver l'identificateur. Vous pouvez obtenir le StreamID (s) avec out string[] streams de l'un des Render() methods:

public override byte[] Render (
    string format, 
    string deviceInfo, 
    out string mimeType, 
    out string encoding, 
    out string fileNameExtension, 
    out string[] streams, //"The stream identifiers. You can use them to render external resources (images, for example) that are associated with the report." 
    out Warning[] warnings 
) 

This question traite plus avec l'utilisation Render et RenderStream.

(je me rends compte de la question est d'un an, mais je pensais que je poste ce que je trouve pour quelqu'un d'autre qui trébuche dessus.)