ASP.NET ReportViewer Server报表渲染流导致异常

时间:2010-10-26 01:44:42

标签: asp.net reportviewer2008

我正在尝试使用ASP.NET ReportViewer(2008 SP1)中的ServerReport.RenderStream方法,但我从该方法中获得了rsStreamNotFound异常。在设置参数后,我尝试了下面两行不同的代码。我正在与SQL Server 2005和SSRS 2005进行交互。我已经看到有关此问题的修补程序的文章,但我真的不想使用修补程序,因为我不确定它是否可以正常运行我没有找到错误的文档

  

无法找到该流。流   提供给的标识符   操作不能位于   报告服务器database.report服务器数据库。

准备代码:

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);

致电1:

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

致电2:

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

清理:

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

对解决方案的任何想法?最终目标是将其写入CSV以进行下载。实际上,我很高兴使用XML,我将其转换为CSV.report服务器数据库。

2 个答案:

答案 0 :(得分:2)

RenderStream用于获取现有Stream并以不同方式处理它或呈现外部资源,因此Render是您一直需要的。 RenderStream的C#签名是

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

第二个参数streamId是现有流的ID;您正在传递String.Empty,因此找不到标识符的错误消息。您可以从Render() methods之一获取out string[] streams的StreamID:

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更多地使用Render和RenderStream。

(我意识到这个问题已经有一年了,但我想我会发现我发现的其他任何偶然发现它的人。)

答案 1 :(得分:0)

是的,Render方法完全符合我的要求。我很想听听那些在RenderStream上有过经验的人。

相关问题