Field为NULL时代码未运行 - SSRS 2005

时间:2009-02-05 18:05:34

标签: reporting-services

我的SSRS 2005报告中有一个文本框。这个文本框的表达是:

=IIF(IsDBNull(Fields!fOrgID), Code.SetMyVar("null"), Code.SetMyVar(Fields!fOrgID.Value))

我还尝试了IsNothing(Fields!fOrgID)以及检查nulls的其他一些变体。

我修改了SetMyVar函数进行测试,现在看起来像这样:

Public Function SetMyVar (var as String)

   MsgBox(var, VbOKCancel, "Test1")

   If var Is Nothing Then
        Return "NOTHING"
    Else
         MyVar = var
         Return var
    End If

End Function

我还有公共变量MyVar

Public Shared Dim MyVar as String

当我的数据库查询返回数据时,这会正确评估,带有值的消息框显示,文本框设置为值,世界通常更幸福。

当我的数据库查询没有返回值时,我收到错误:

  

查询未返回数据集的行。因此表达   评估为null。

并且SetMyVar函数似乎永远不会被运行(您永远不会弹出消息框)。正如所料,我的情绪包括SSRS的愤怒,悲伤和仇恨。

我读了一些关于评估IF语句两边的SSRS的内容,所以也许这就是我得到错误的原因(可能在Code.SetMyVar(Fields!fOrgID.Value)上)...不知道我怎么解决这个问题。

思考?建议?舒适的话?

5 个答案:

答案 0 :(得分:1)

从事物的声音来看,问题似乎是SSRS在显示零记录时出现问题。我建议使用以下其中一项:

1)使用一个适当处理零记录的控件(表格。我认为列表也是如此)。

2)修改您的查询以返回带有空值的单个记录,否则它将返回零记录。

答案 1 :(得分:1)

对原始问题的回答:

=IIF(IsNothing(Fields!fOrgID),
     Code.SetMyVar("null"),
     Code.SetMyVar(IIF(IsNothing(Fields!fOrgID),"Foo",Fields!fOrgID.Value)))

错误来自正在评估的IIF的双方。上面语句中的额外IIF将避免使用空值调用Code.SetMyVar。

答案 2 :(得分:0)

我相信你对Iif总是评估它的两个值参数是正确的(至少,在Visual Basic中它是这样)。我不确定为什么你会得到这个精确的错误(除非字符串不能被指定为DBNull的值?),但你几乎肯定想用不同的方法来解决这个问题。

原因在于,无论条件值如何,您当前的代码都可能始终调用两种set方法。

答案 3 :(得分:0)

我也试过这个(也尝试过使用IsNothing的版本)......

= Code.SetField(IsDBNull以便(字段!fOrgID))

并将函数更改为接受布尔值的函数。我认为上面这个函数总是返回true或false,但是如果是NULL,我再次得到“查询没有返回数据集的行。因此表达式的计算结果为null。”。

如果字段为null,我需要传回我的代码(因为这会让我知道数据源是否为null)。

如果你能想到更好的方法,请告诉我,因为我不能。

答案 4 :(得分:0)

适用于我的SSRS 2008报告的公式。

= IIF(String.IsNullOrEmpty(字段!NullableFieldwithPossibleBlankStrings.Value), “是”, “否”)