【问题标题】:Reporting Services - handling an empty date?Reporting Services - 处理空日期?
【发布时间】:2010-07-14 15:09:45
【问题描述】:

嘿,我有一个如下所示的报告参数:01.01.2009 00:00:00

它是一个日期(作为字符串),您可能已经猜到了:)。问题是,这个参数也可以是一个空字符串。所以我尝试了这些表达方式:

  1. =IIf(IsDate(Parameters!DateTo.Value), CDate(Parameters!DateTo.Value), "")
  2. =IIf(Len(Parameters!DateTo.Value) > 0, CDate(Parameters!DateTo.Value), "")

两者都不起作用,我打印表达式结果的文本字段的值始终是 #Error。一旦我删除了 CDate 的东西,它就可以工作,但我必须使用它。还有其他方法可以实现吗?我想要的是,如果它不是日期或日期(格式 dd.mm.yyyy),如果它是日期,则不显示任何内容。

想法?

谢谢:)

【问题讨论】:

    标签: vb.net reporting-services expression


    【解决方案1】:

    IIf 的所有参数都被评估,这会导致您的错误,因为 CDate 将因空字符串而失败。

    你可以通过使用标准的 if 语句编写一个函数来解决这个问题:

    Function FormatDate(ByVal s As String) As String
        If (s <> "") Then
            Return CDate(s).ToString()
        Else
            Return ""
        End If
    End Function
    

    然后调用它:=Code.FormatDate(Parameters!DateTo.Value)

    【讨论】:

    • 是的,我猜 VB if 太懒了:) ...但我该如何解决这个问题?
    • 更新了一些示例代码。应该非常接近你需要的。但是,我的报告服务/vb 已经生锈了。
    【解决方案2】:

    首先,修复您的数据库以正确存储日期,而不是采取这些变通办法。您可能也有错误的数据(例如 2010 年 2 月 30 日或我最喜欢的,尽快)。真的没有理由不在需要修复的数据库级别修复这个问题,除非这是供应商提供的无法更改的软件(不过我会冲他们大喊大叫,真的要通知他们,并要求他们修复他们的数据模型或去一个由知道他们在做什么的人设计的新产品。不能正确使用日期的供应商可能拥有非常糟糕的软件)。 在您用于选择信息的查询中,您是否考虑过将所有非日期都转换为空?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多