我正在尝试使用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服务器数据库。
答案 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上有过经验的人。