【问题标题】:c# report returns #errorc# 报告返回#error
【发布时间】:2012-02-15 23:17:18
【问题描述】:

当我使用以下表达式时,reportviewer 中出现 #Error:

    =IIf(Fields!PaymentNumber.Value>0,
         IPmt(Fields!Annual_Interest_Rate.Value/1200,
              Fields!Payment.Value,
              Fields!No_of_Monthly_Payments.Value,
              Fields!Total_Amount_Financed.Value),0)

当我删除 IPmt() 函数并改用一些静态值时,它可以工作。 有没有办法找出确切的错误?

【问题讨论】:

  • 这看起来像 VB.Net 而不是 C#
  • 是的,这是 rdlc 文件上的 VB.Net 表达式
  • Reporting Services 使用 VB 运行时库。你在使用 SSRS 吗?
  • 不,我没有使用 SSRS,只是一个简单的微软报告服务
  • @Kres SSRS 是 Microsoft 报告服务

标签: vb.net reporting-services report


【解决方案1】:

基于equation used to calculate an annuity,我会说您传递了 0 表示每年的周期数或 0 表示利率,因此得到除以零的错误。

您正在检查 PaymentNumber 是否大于零,但您的 IPmt 计算中未使用 PaymentNumber,因此您可能在计算中使用了错误的字段?

无论如何,不​​管怎样,您需要注意 IIF 不是一个语句,它是一个传递两个参数的函数。因此,这两个参数在函数调用之前被评估,因此“if 语句”的两边都被评估。这可能会令人困惑,因为当您检查除数非零时,您仍然会得到除以零的错误。请记住,它是一个函数,而不是语句,因此没有短路评估来防止执行错误的部分。但是,有一些变通方法,主要涉及执行两次 IIF 调用以删除在除法计算中使用的零值:

=IIF(Fields!DivideBy.Value <> 0, Fields!Something.Value / IIF(Fields!DivideBy.Value <> 0, Fields!DivideBy.Value, 1), 0)

【讨论】:

  • 实际上我修复了数据库中的值,所以现在我不能得到除以零的错误。而我没有。因为如果 PaymentNumber > 0 我得到计算的 IPmt,但如果它等于 0 我得到 #Error..
【解决方案2】:

在 Reporting Services 中调试 #Error 并不是特别容易。

根据我的经验,最好的方法是将其分解为各个组成部分,看看其中是否存在问题。您已经将其范围缩小到 IPmt 函数,该函数预计将传递四个 Double 参数。

您是否检查过您传入的四个参数都有值且类型正确?

【讨论】:

    【解决方案3】:

    SSRS 中的“IIF”没有短路评估。确保在调用此函数时,即使 PaymentNumber 为 0 或更小,您的 IPmt() 值也是有效的。

    有几种可能的解决方法:

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2013-04-16
      • 2014-04-15
      • 2017-01-19
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多