Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回一个响应,以指示;无数据“;通过ReportExecution.RenderReport()API方法_C#_Asp.net_Reporting Services - Fatal编程技术网

C# 返回一个响应,以指示;无数据“;通过ReportExecution.RenderReport()API方法

C# 返回一个响应,以指示;无数据“;通过ReportExecution.RenderReport()API方法,c#,asp.net,reporting-services,C#,Asp.net,Reporting Services,我正在寻找一个技巧、技巧或黑客,它允许返回空字节数组、out警告标志或其他一些指示符,以让调用ReportExecution2005.RenderReport()的人知道没有为报表返回任何数据 使用可见性来模拟这一点。检查数据集的计数,如果其0不显示任何内容,则创建一个文本框,该文本框显示“无可用数据”或类似内容,并将可见性设置为仅在计数为0时显示。希望这有意义。我相信我知道你现在在做什么,但如果我错了,请纠正我 您在报告中创建了数据集和必需的参数,并在其中设置了存储过程。然后,您只需从代码中传

我正在寻找一个技巧、技巧或黑客,它允许返回空字节数组、out警告标志或其他一些指示符,以让调用
ReportExecution2005.RenderReport()
的人知道没有为报表返回任何数据

使用可见性来模拟这一点。检查数据集的计数,如果其0不显示任何内容,则创建一个文本框,该文本框显示“无可用数据”或类似内容,并将可见性设置为仅在计数为0时显示。希望这有意义。

我相信我知道你现在在做什么,但如果我错了,请纠正我

您在报告中创建了数据集和必需的参数,并在其中设置了存储过程。然后,您只需从代码中传递参数,然后您只需呈现报告,该报告将导致SSR自动填充与参数相关的数据集

这是一种很好的方法,但这会导致您在呈现报告之前对数据源一无所知

我相信解决您问题的方法是在reporter之外生成数据源,从而从代码执行过程。然后,在将数据集发送给报告程序之前,您可以访问该数据集的任何信息。因此,如果过程未返回任何数据,则允许您根本不呈现报告。 当您呈现报告时,您将不再需要执行该过程(效率)

  • 实现这一点的最简单方法是使用本地报告 服务(通常称为rdlc

    不需要使用共享数据源,因为您拥有 已经需要数据集了。您只需将数据表传递给 reporter,它将正确渲染,而无需执行 再也不用做手术了

    有很多教程可以让您轻松地完成此任务,以下是 一个简单的例子:

  • 如果您真的坚持使用较旧的报告服务,那么它将 设置可能会稍微复杂一些,但仍然有可能。在这里 详细教程如下:
在呈现报表之前,只需执行以下过程来填充数据集。并检查是否要继续呈现报告。
例如:

SqlDataAdapter daVendor = new SqlDataAdapter();
daVendor.SelectCommand = cmd;
DataSet dsVendors = new DataSet();
daVendor.Fill(dsVendors);

if(dsVendors.Any()){
//Render the report (passing the dataset to the reporter) and attach it to the mail.
}
else {
//Don't render the report and create corresponding message to send as email.
}
我强烈建议使用本地报告服务。无论如何,您都不想添加额外的功能,因为您只是将其作为电子邮件附件发送


我希望这对您有所帮助,如果您还有任何问题,请留下评论。

谢谢您提供的信息,但是,这对我的案例不起作用。我不需要基于空数据集显示或隐藏报表项。我正在尝试找出是否可以在ReportExecution.ExecutionInfo或ReportExecution.Render()函数的warnings out参数中返回某些内容,以指示我的密钥数据集未返回任何数据。我正在发送通知,并试图通过一步完成计数检查/报告呈现来减轻服务代理的负担。哦,抱歉,我误解了您在这里的意图。你能把函数封装在你创建的函数中吗?是的,我有。问题是,为了获得准确的记录计数,我需要调用与报表使用的存储过程几乎相同的存储过程。因此,与其对记录计数执行长时间的检查,然后在有数据时调用ssrs,不如调用ssrs并处理它。但是,我需要知道SSR是否没有返回任何数据。我有点被卡住了,要回过头来寻找一种更快的方法来获得记录计数。我不明白这个问题。如果您共享了用于执行过程/查询和呈现报告的当前代码,我可能会更好地理解。一旦有了数据集,就可以调用
.Any()
,该数据集应该会提供所需的信息,甚至可以在将其发送到报表之前调用该数据集。为什么您希望调用者知道报表是否包含数据,除了让用户知道报表是空的之外,您还想如何处理这些信息?您可以使用一个return语句来传递您想要的任何信息,而不是将呈现放在一个void方法中。我需要一个计数来确定报告是否应该呈现。报告的内容被塞进电子邮件并排队。这些通知由服务代理安排和发送,因此效率非常重要。用于计数的存储过程没有那么高效。我希望使用渲染的结果,以便可以在一个操作中执行计数/渲染。但是,如果没有要报告的内容返回为空,则该函数是ssrs web服务的一部分,我正在调用Render方法…可能是一个自定义的ExtensionAnks,我给您200分,因为我的想法是开箱即用的。我没有考虑将数据集发送到报告中。这无疑会解决我的问题。至于本地报告,我不知道本地报告是否能够以字节[]的形式呈现和交付内容。您有几个呈现选项,例如PDF和Excel。