对象抛出NullReferenceExpection

2020-08-23 14:19发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试在需要打开的 ASP.NET Web API中创建项目, 填充并下载水晶报表。

我的环境如下:

  • Visual Studio 2015
  • 已安装CR运行时(最新)
  • 已安装Visual Studio CR(最新)
  • .NET Framework 4.5
  • ASP.NET Web API
  • 程序集版本:13.0.21.2533

我正在打开并加载文件。 然后,我要设置参数值,然后设置表登录信息。

我可以在调试中看到我的对象具有所需的行,并且一切正确。 但是当我到达出口时,它将引发以下异常:

{" Message":"发生错误。"," ExceptionMessage":"对象引用未设置为对象的实例。"," ExceptionType":" System.NullReferenceException"," StackTrace":c__DisplayClass10。 b__9(Object instance,Object [] methodParameters)\ r \ n在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2自变量,CancellationToken cancelToken)\ r \ n--堆栈跟踪从 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r \ n在系统处引发异常的先前位置。 Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\ r \ n ---从上一个引发异常的位置开始的堆栈跟踪--- \ r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificatio n(任务任务)\ r \ n位于System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- \ r \ n 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r \ n在System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n \ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n位于System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"" style =" color:rgb(0,136,0);">"在CrystalDecisions.CrystalReports.Engine .FormatEngine.ExportToStream(ExportRequestContext reqContext)\ r \ n在CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions选项)\ r \ n在CrystalDecisions .CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType)\ r \ n位于lambda_method处的cubeERP.Controllers.BaseApiController.ShowDocumentForDownload()\ r \ n(System.Web处为Closure,Object,Object [])\ r \ n。 Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c__DisplayClass10。 b__9(Object instance,Object [] methodParameters)\ r \ n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2 arguments, CancellationToken cancellingToken)\ r \ n ---从上一个引发异常的位置开始的堆栈结束跟踪--- \ r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n位于System.Web.Http.Controllers.ApiControllerActionInvoker。 d__0.MoveNext()\ r \ n--从先前引发异常的位置开始的堆栈跟踪- -\ r \ n在System.Runtim e.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Controllers.ActionFilterResult。 d__2.MoveNext() \ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n位于System.Runtime.CompilerServices.TaskAwaiter。 System.Web.Http.Controllers.AuthenticationFilterResult。 d__0.MoveNext()\ r \ n上的HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n-从上次引发异常的位置开始的堆栈跟踪结束--- r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher。 d__1.MoveNext()"}

即使我导出流或文件或HttpResponse,我也面临相同的异常。

请帮助!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试在需要打开的 ASP.NET Web API中创建项目, 填充并下载水晶报表。

我的环境如下:

  • Visual Studio 2015
  • 已安装CR运行时(最新)
  • 已安装Visual Studio CR(最新)
  • .NET Framework 4.5
  • ASP.NET Web API
  • 程序集版本:13.0.21.2533

我正在打开并加载文件。 然后,我要设置参数值,然后设置表登录信息。

我可以在调试中看到我的对象具有所需的行,并且一切正确。 但是当我到达出口时,它将引发以下异常:

{" Message":"发生错误。"," ExceptionMessage":"对象引用未设置为对象的实例。"," ExceptionType":" System.NullReferenceException"," StackTrace":c__DisplayClass10。 b__9(Object instance,Object [] methodParameters)\ r \ n在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2自变量,CancellationToken cancelToken)\ r \ n--堆栈跟踪从 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r \ n在系统处引发异常的先前位置。 Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\ r \ n ---从上一个引发异常的位置开始的堆栈跟踪--- \ r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificatio n(任务任务)\ r \ n位于System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- \ r \ n 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r \ n在System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n \ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n位于System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"" style =" color:rgb(0,136,0);">"在CrystalDecisions.CrystalReports.Engine .FormatEngine.ExportToStream(ExportRequestContext reqContext)\ r \ n在CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions选项)\ r \ n在CrystalDecisions .CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType)\ r \ n位于lambda_method处的cubeERP.Controllers.BaseApiController.ShowDocumentForDownload()\ r \ n(System.Web处为Closure,Object,Object [])\ r \ n。 Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c__DisplayClass10。 b__9(Object instance,Object [] methodParameters)\ r \ n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2 arguments, CancellationToken cancellingToken)\ r \ n ---从上一个引发异常的位置开始的堆栈结束跟踪--- \ r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n位于System.Web.Http.Controllers.ApiControllerActionInvoker。 d__0.MoveNext()\ r \ n--从先前引发异常的位置开始的堆栈跟踪- -\ r \ n在System.Runtim e.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Controllers.ActionFilterResult。 d__2.MoveNext() \ r \ n--从上一个引发异常的位置开始的堆栈跟踪--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n位于System.Runtime.CompilerServices.TaskAwaiter。 System.Web.Http.Controllers.AuthenticationFilterResult。 d__0.MoveNext()\ r \ n上的HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n-从上次引发异常的位置开始的堆栈跟踪结束--- r \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher。 d__1.MoveNext()"}

即使我导出流或文件或HttpResponse,我也面临相同的异常。

请帮助!

付费偷看设置
发送
7条回答
梦想连接
1楼 · 2020-08-23 14:57.采纳回答

您可以从查看器中导出报告吗?

还可以在Viewer和代码中尝试不同的格式。

clever101
2楼-- · 2020-08-23 15:04

请在发生错误的位置张贴代码。

Doze时光
3楼-- · 2020-08-23 14:57

您正在使用哪个版本的CR for VS runtime?

您可以从此处获取SP 26:

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

该错误始终表示报表对象已超出代码范围。

以调试模式运行,并验证报告对象是否为空

蓋茨
4楼-- · 2020-08-23 15:10

我确实运行了代码。 在导出流的地方产生了同样的错误。

此外,我正在使用iisexpress x64在调试模式下运行。 权限似乎还可以。 我还在同一父文件夹中读取/写入其他文件(json),它们工作正常。

您将获得更多帮助。

能不能别闹
5楼-- · 2020-08-23 15:13

嗨,唐,

我正在运行SP26

正如我提到的,在调试中,我可以看到我的文档对象,它具有所有正确的记录和数据库连接信息。 我什至通过在Visual Studio中打开报表并提供相同的参数和数据库连接来验证该报表,并且工作正常。 但是,当我导出它时,它将引发空指针异常。 我的代码如下:

 [Route(" api/document/download")]
 [HttpGet]
 公共HttpResponseMessage ShowDocumentForDownload(){
  尝试{
   TableLogOnInfos crTableLogonInfos = new TableLogOnInfos();
   TableLogOnInfo crTableLogonInfo = new TableLogOnInfo();
   ConnectionInfo connInf =新的ConnectionInfo();
   connInf.DatabaseName =" *****";
   connInf.ServerName =" ****************";
   connInf.Password =" *****************";
   connInf.UserID =" ******";


   ReportDocument rd = new ReportDocument();
   字符串路径= System.Web.Hosting.HostingEnvironment.MapPath("〜/extras/temp/HUSSAINI/60secPOSInvoiceA5.rpt");
   rd.Load(path);


   foreach(rd.Database.Tables中的表表){
    crTableLogonInfo = table.LogOnInfo;
    crTableLogonInfo.ConnectionInfo = connInf;
    table.ApplyLogOnInfo(crTableLogonInfo);
   }


   var参数=新字典<字符串,
    字符串>();
   parameters.Add(" DOCTYP"," 01013");
   parameters.Add(" DOCNUM"," 0320200303003000094");
   字符串vFieldName;


   for(int i = 0; i <= rd.ParameterFields.Count-1; i ++){
    如果(rd.ParameterFields [i] .ReportName ==""){
     vFieldName = rd.ParameterFields [i] .PromptText.ToUpper();
     rd.ParameterFields [i] .CurrentValues.AddValue(parameters [vFieldName.ToString()]。ToString());
    }
   }


   如果(rd.HasRecords)
 /**************************************直到这里rd都具有所有正确的数据并且不为空**  **************************************************/
   {
    尝试{
     var stream = rd.ExportToStream(ExportFormatType.PortableDocFormat);  <-------------------抛出异常
    } catch(Exception e){


    }
   }
  }
 }

 
Nir深蓝
6楼-- · 2020-08-23 15:12

看起来正确,可能是权限,取决于进程的所有者...。

尝试一下,我将其保存到磁盘也只是为了验证数据是否正确。 在那里:

 CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions();
//CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions PDFExpOpts = new CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions();

//diskOpts.DiskFileName =" d:\\ reports1.pdf";

//PDFExpOpts.FormatOptions = CreateBookmarksFromGroupTree = true;
//PDFExpOpts.FirstPageNumber = 1;
//PDFExpOpts.LastPageNumber = 1;
//PDFExpOpts.UsePageRange = true;
//rcd.PrintOutputController.ExportEx(PDFExpOpts);

//设置CrReportExportFormatEnum以将报告导出为PDF文件。
 rasReportExportFormat = CrReportExportFormatEnum.crReportExportFormatPDF;
            
 rasPrintOutputController = rcd.PrintOutputController;

//使用PrintOutputController的Export()方法将报告导出到ByteArray。
 ByteArray tempByteArray = rasPrintOutputController.Export(rasReportExportFormat,0);
 Byte [] byteStreamOutput = tempByteArray.ByteArray;

 System.IO.Stream oStream;
 byte [] byteArray = null;

 oStream = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
 byteArray =新的byte [oStream.Length];
 oStream.Read(byteArray,0,Convert.ToInt32(oStream.Length-1));

//这用于验证文件,因此我将其保存到磁盘
 尝试
 {
     System.IO.File.Create(diskOpts.DiskFileName,Convert.ToInt32(oStream.Length-1))。Close();
 }
 抓住(前例外)
 {
     btnSQLStatement.Text ="创建错误:" + ex.Message;
    //返回;
 } 
Cikesha
7楼-- · 2020-08-23 15:04

请帮助解决此问题。

一周热门 更多>