ASP.NET ReportViewer Server Рендеринг потока отчетов приводит к исключению - PullRequest
0 голосов
/ 26 октября 2010

Я пытаюсь использовать метод ServerReport.RenderStream из ASP.NET ReportViewer (2008 SP1), но я получаю исключение rsStreamNotFound из метода.Я попробовал две разные строки кода ниже после установки параметров.Я взаимодействую с SQL Server 2005 и SSRS 2005. Я видел статьи об исправлении для этой проблемы, но я действительно не хотел бы прибегать к исправлению, так как я не уверен, что с ним все будет в порядке.in. Я не нашел слишком много документации по ошибке

Поток не найден.Идентификатор потока, предоставленный операции, не может быть расположен в базе данных сервера сервера отчетов 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 ]

2 голосов
/ 30 декабря 2014

RenderStream используется для того, чтобы взять существующий поток и обработать его другим способом или визуализировать внешние ресурсы, поэтому Render был тем, что вам было нужно все время. Подпись C # RenderStream равна

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

Второй параметр, streamId, это идентификатор существующего потока; Вы передавали String.Empty, следовательно, сообщение об ошибке не может найти идентификатор. Вы можете получить StreamID с помощью out string[] streams из одного из Render () методов :

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
)

Этот вопрос больше касается использования Render и RenderStream.

(Я понимаю, что этому вопросу год, но я думал, что опубликую то, что нашел, для всех, кто наткнется на него.)

0 голосов
/ 28 октября 2010

Да, метод Render делает именно то, что я хочу. Хотелось бы услышать от кого-то, кто имеет опыт работы с RenderStream.

...