1

有谁知道我如何解决这个错误或它意味着什么?

错误:Microsoft.Reporting.WinForms.LocalProcessingException

内部异常:Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException

(我将完整的错误作为注释放在下面代码片段的 catch 块中)

这是我第一次尝试在 VS 2010 中运行本地报告/报告查看器,但是这种渲染方法每次都在爆炸,谷歌似乎没有提供太多帮助。

你能发现任何明显的错误吗?

仅供参考,未显示的内容是一个非常简单的 XSD,其中包含一个数据表,该数据表填充在要用作数据集的代码中,以及一个 rdlc 文件(报告),其中包含一个表并使用仅包含一个数据集的数据源(xsd)。

谢谢。

class Program
{
    private const string UID = "myLogin";
    private const string PASSWORD = "myPassword";
    private const string IP = "myServerIPaddress";

    static void Main(string[] args)
    {
        Warning[] warnings;
        string[] streamIds;
        string mimeType = string.Empty;
        string encoding = string.Empty;
        string extension = string.Empty;
        try
        {
            using (MySqlConnection con = GetMySqlConnetion("schools"))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = @"SELECT `venrollmentandmaxenrollment`.`classId`,
                                        `venrollmentandmaxenrollment`.`NumberOfStudentsEnrolled`,
                                        `venrollmentandmaxenrollment`.`NumberOfMaxEnrollments`
                                    FROM `schools`.`venrollmentandmaxenrollment`;";

                    MySqlDataReader sessionReportReader = cmd.ExecuteReader();
                    DataSet1 dataSet1 = new DataSet1();
                    dataSet1.Load(sessionReportReader, System.Data.LoadOption.Upsert, dataSet1.Tables[0].TableName);
                    ReportViewer viewer = new ReportViewer();
                    viewer.ProcessingMode = ProcessingMode.Local;
                    viewer.LocalReport.ReportPath = "C:\\VS\\TestReports\\TestReports\\Report1.rdlc";
                    viewer.LocalReport.DataSources.Add(new ReportDataSource(dataSet1.Tables[0].TableName, dataSet1.Tables[0]));
                    byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                    //TODO: do something with bytes, and drag this code back to the main application, once we get this working!
                }
            }
        }
        catch (Exception ex)
        {
            /*
             LocalReport.Render always takes us here with this exception:
             * 
             Microsoft.Reporting.WinForms.LocalProcessingException occurred
              Message=An error occurred during local report processing.
              Source=Microsoft.ReportViewer.WinForms
              StackTrace:
                   at Microsoft.Reporting.WinForms.LocalReport.InternalRender(String format, Boolean allowInternalRenderers, String deviceInfo, PageCountMode pageCountMode, CreateAndRegisterStream createStreamCallback, Warning[]& warnings)
              InnerException: Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException
                   Message=An error has occurred during report processing.
                   Source=Microsoft.ReportViewer.Common
                   ExceptionLevelHelpLink=http://go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsProcessingAborted&ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&ProdVer=1.0
                   SkipTopLevelMessage=false
                   StackTrace:
                        at Microsoft.ReportingServices.OnDemandProcessing.OnDemandProcessingContext.AbortHelper.ThrowAbortException(String reportUniqueName)
                        at Microsoft.ReportingServices.OnDemandProcessing.OnDemandProcessingContext.CheckAndThrowIfAborted()
                        at Microsoft.ReportingServices.OnDemandProcessing.RetrievalManager.FetchData(Boolean mergeTran)
                        at Microsoft.ReportingServices.OnDemandProcessing.RetrievalManager.PrefetchData(ReportInstance reportInstance, ParameterInfoCollection parameters, Boolean mergeTran)
                        at Microsoft.ReportingServices.OnDemandProcessing.Merge.FetchData(ReportInstance reportInstance, Boolean mergeTransaction)
                        at Microsoft.ReportingServices.ReportProcessing.ReportProcessing.ProcessOdpReport(Report report, OnDemandMetadata odpMetadataFromSnapshot, ProcessingContext pc, Boolean snapshotProcessing, Boolean reprocessSnapshot, Boolean processUserSortFilterEvent, Boolean processWithCachedData, ErrorContext errorContext, DateTime executionTime, IChunkFactory cacheDataChunkFactory, StoreServerParameters storeServerParameters, GlobalIDOwnerCollection globalIDOwnerCollection, SortFilterEventInfoMap oldUserSortInformation, EventInformation newUserSortInformation, String oldUserSortEventSourceUniqueName, ExecutionLogContext executionLogContext, OnDemandProcessingContext& odpContext)
                        at Microsoft.ReportingServices.ReportProcessing.ReportProcessing.RenderReport(IRenderingExtension newRenderer, DateTime executionTimeStamp, ProcessingContext pc, RenderingContext rc, IChunkFactory cacheDataChunkFactory, IChunkFactory yukonCompiledDefinition, Boolean& dataCached)
                        at Microsoft.ReportingServices.ReportProcessing.ReportProcessing.RenderReport(IRenderingExtension newRenderer, DateTime executionTimeStamp, ProcessingContext pc, RenderingContext rc, IChunkFactory yukonCompiledDefinition)
                        at Microsoft.Reporting.LocalService.CreateSnapshotAndRender(CatalogItemContextBase itemContext, ReportProcessing repProc, IRenderingExtension renderer, ProcessingContext pc, RenderingContext rc, SubreportCallbackHandler subreportHandler, ParameterInfoCollection parameters, DatasourceCredentialsCollection credentials)
                        at Microsoft.Reporting.LocalService.Render(CatalogItemContextBase itemContext, Boolean allowInternalRenderers, ParameterInfoCollection reportParameters, IEnumerable dataSources, DatasourceCredentialsCollection credentials, CreateAndRegisterStream createStreamCallback, ReportRuntimeSetup runtimeSetup)
                        at Microsoft.Reporting.WinForms.LocalReport.InternalRender(String format, Boolean allowInternalRenderers, String deviceInfo, PageCountMode pageCountMode, CreateAndRegisterStream createStreamCallback, Warning[]& warnings)
                   InnerException: Microsoft.ReportingServices.ReportProcessing.ReportProcessingException
                        Message=DataSet1
                        Source=Microsoft.ReportViewer.Common
                        ExceptionLevelHelpLink=http://go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsErrorCreatingDataReader&ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&ProdVer=1.0
                        SkipTopLevelMessage=false
                        StackTrace:
                             at Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunDataSetQuery()
                             at Microsoft.ReportingServices.OnDemandProcessing.TablixProcessing.RuntimeOnDemandDataSet.Process()
                             at Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.ProcessConcurrent(Object threadSet)
                        InnerException: 

             */
        }
    }

    public static MySqlConnection GetMySqlConnetion(string DB)
    {
        string connStr = String.Format(
            "SERVER={0}; Port={1}; UID={2}; PASSWORD={3}; DATABASE={4}; pooling={5};",
            IP,
            "3306",
            UID,
            PASSWORD,
            DB,
            "false");

        MySqlConnection mycon = null;
        try
        {
            mycon = new MySqlConnection(connStr);
            mycon.Open();
        }
        catch (MySqlException ex)
        {
            Logger logger = new Logger("Test Reports App");
            logger.Log(ex);
        }

        return mycon;
    }
}
4

3 回答 3

1

创建一个自定义类来绑定你的数据。

public class MyReportClass
{
  public int ID {get;set;}
  public string Name {get;set;}
}

然后使用DataReader

//snippet
MySqlDataReader reader = cmd.ExecuteReader();

// add to collection
List<MyReportClass> myReportClassCollection = new List<MyReportClass.();

while (reader.Read())
{
  // populate entity
  var myReportClass = new MyReportClass();
  // set properties, skipping DBNull checking for quickness
  myReportClass.ID = (int)reader["ID"];
  myReportClass.Name = (string) reader["Name"];

  myReportClassCollection.Add(myReportClass);
}

 ReportViewer viewer = new ReportViewer();
 viewer.ProcessingMode = ProcessingMode.Local;
 viewer.LocalReport.ReportPath = "C:\\VS\\TestReports\\TestReports\\Report1.rdlc";
 viewer.LocalReport.DataSources.Add(new ReportDataSource("myDataSource", myReportClassCollection));
于 2013-09-04T21:12:28.353 回答
0

我从 Render 语句中得到了 LocalProcessingException,因为我正在为用户没有写入权限的目录(特别是 Program Files (x86) 文件夹 - OOPS)中的文件渲染到文件流。它在尝试渲染时无法创建文件,因此抛出了 LocalProcessingException。

因此,请检查您尝试渲染到的文件/文件流的位置,并检查用户的权限。注意我的开发机器上没有这个问题,我对几乎所有东西都拥有完全权限。

希望这对那里的人有所帮助,即使这是我自己制造的一个非常愚蠢的问题。

于 2014-05-22T17:23:10.120 回答
0

尝试替换此行

viewer.LocalReport.DataSources.Add(new ReportDataSource(dataSet1.Tables[0].TableName, dataSet1.Tables[0]));

通过这个

viewer.LocalReport.DataSources.Add(new ReportDataSource(dataSet1.DataSetName, dataSet1.Tables[0]));
于 2014-11-28T10:56:47.283 回答