Ошибка при рендеринге .rdl файла в формат pdf - PullRequest
0 голосов
/ 27 мая 2010

Я генерирую отчеты, используя службы отчетов SQL Server. Я сгенерировал отчет и поместил файл отчета .rdl на диск "E". Теперь, когда я собираюсь преобразовать файл отчета .rdl в формат pdf, я получаю исключение: - «Произошла ошибка при локальной обработке отчета».

Трассировка стека выглядит следующим образом: -

 at Microsoft.Reporting.WebForms.LocalReport.InternalRender(String format, Boolean allowInternalRenderers, String deviceInfo, CreateAndRegisterStream createStreamCallback, Warning[]& warnings)<br /> at Microsoft.Reporting.WebForms.LocalReport.InternalRender(String format, Boolean allowInternalRenderers, String deviceInfo, String& mimeType, String& encoding, String& fileNameExtension, String[]& streams, Warning[]& warnings)<br /> at Microsoft.Reporting.WebForms.LocalReport.Render(String format, String deviceInfo, String& mimeType, String& encoding, String& fileNameExtension, String[]& streams, Warning[]& warnings)<br /> at SaltlakeSoft.APEX2.Controllers.TestPageController.RenderReport() in E:\Documents and Settings\Administrator\Desktop\afetbuild15thmayapex2\apex2\Controllers\TestPageController.cs:line 1626<br /> at lambda_method(ExecutionScope , ControllerBase , Object[] )<br /> at System.Web.Mvc.ActionMethodDispatcher.c_DisplayClass1.b_0(ControllerBase controller, Object[] parameters)<br /> at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)<br /> at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters)<br /> at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters)<br /> at System.Web.Mvc.ControllerActionInvoker.c_DisplayClassa.b_7()<br /> at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

Я использую следующий код: -

LocalReport report = new LocalReport();

report.ReportPath = @"E:\Report1.rdl";

List<Employee> employeeCollection = empRepository.FindAll().ToList();

ReportDataSource reportDataSource = new ReportDataSource("dataSource1",employeeCollection);

report.DataSources.Clear();

report.DataSources.Add(reportDataSource);

report.Refresh();

string reportType = "PDF";

string mimeType;

string encoding;

string fileNameExtension;

string deviceInfo ="<DeviceInfo>" +"<OutputFormat>PDF</OutputFormat>" +
    "<PageWidth>8.5in</PageWidth>" + "<PageHeight>11in</PageHeight>" +
    "<MarginTop>0.5in</MarginTop>" +"<MarginLeft>1in</MarginLeft>" + 
    "<MarginRight>1in</MarginRight>" +"<MarginBottom>0.5in</MarginBottom>" +
    "</DeviceInfo>";

Warning[] warnings;

string[] streams;

byte[] renderedBytes;           

renderedBytes = report.Render(reportType,deviceInfo,out mimeType,out encoding, out fileNameExtension, out streams, out warnings);

Response.Clear();

Response.ContentType = mimeType;

Response.AddHeader("content-disposition", "attachment; filename=foo." + fileNameExtension);

Response.BinaryWrite(renderedBytes);

Response.End(); 

1 Ответ

0 голосов
/ 22 сентября 2010

Вам нужно будет обернуть свой код в блок try / catch и посмотреть на исключение InnerException, чтобы увидеть детали того, почему рендеринг отчета не удался. Возможны сотни различных причин: от непредвиденных данных в результатах запроса до неправильных полей страницы или даже исключения из выражения, встроенного в отчет.

Я видел до двух вложенных исключений InnerException (т. Е. thisException.InnerException.InnerException), и может быть возможно иметь больше, поэтому вы, вероятно, захотите поместить цикл в свой процесс, чтобы получить сообщение из самого внутреннего исключения.

...