在不进行 ToString 转换的情况下检查 OracleParameter.Value 是否为 Null

Checking if OracleParameter.Value is Null without doing ToString conversion

提问人:WSC 提问时间:3/28/2020 最后编辑:WSC 更新时间:3/30/2020 访问量:1302

问:

我有一个存储过程,其中包含一些参数。在 .NET 方面,我对如何在将其转换为 .NET 之前检查参数是否为 null 感到困惑。我以前在几个不同的项目中做过很多这种事情,但我以前从未遇到过这个问题......OUTDouble?

这是我尝试过的所有组合:

Command.Parameters.Add("PparStsValue", OracleDbType.Decimal).Direction = ParameterDirection.Output

PparStsValue = If(IsDBNull(Command.Parameters("PparStsValue").Value) OrElse
                  IsNothing(Command.Parameters("PparStsValue").Value) OrElse
                  Command.Parameters("PparStsValue").Value.ToString = "",
               Nothing,
               CDbl(Command.Parameters("PparStsValue").Value.ToString))

我做过的另一件事确实有效,但检查一下似乎很荒谬:

Command.Parameters("PparStsValue").Value.ToString = "null"

这计算结果为,因此我可以识别空值......但是为什么 null 值会转换为字符串呢?这似乎与通常转换为 .True"null"""

撇开这一点不谈,主要问题是为什么不返回 true?IsDBNullIsNothing

vb.net oracle oracle11g odp.net

评论


答:

1赞 T.S. 3/29/2020 #1

使用 ODP 时,参数不会自动返回 CLR 类型,而是返回 oracle 类型。所以对数字的方法是这样的OracleParameter

Dim oraDec as OracleDecimal = 
    DirectCast(Command.Parameters("PparStsValue").Value, OracleDecimal)

Dim dbl as Double
If Not oraDec.IsNull Then 
    dbl = Convert.ToDouble(oraDec.Value)
End If

评论

0赞 WSC 3/30/2020
这确实有效,谢谢。我仍然不明白为什么我以前从未这样做过,但哦,好吧。
0赞 T.S. 3/30/2020
@WSC很好。当你说“之前”时。你是什么意思?你以前做过什么?也许,以前,有些不同?不同的提供程序,不同的参数使用等?
0赞 WSC 3/30/2020
我的原始代码曾经只是这样,这奏效了。我现在在想,我可能已经更新了 .NET Framework 版本或 ODP.NET 版本,因为它正在工作,并且其中一个更改了将 null 值转换为而不是 .IsNothing(Command.Parameters("PparStsValue").Value) OrElse Command.Parameters("PparStsValue").Value.ToString = ""ToString"null"""
0赞 T.S. 3/30/2020
井。我们可以开始你不应该使用,因为......这就是它“工作”的原因。因为为您提供了一个值类型。或。因此,在你之前的情况下,你可能会检索到一个 ,这将给你 .这从一开始就是一种糟糕的方法 - 除非它是字符串,否则调用您的返回值。如果您的代码特定于调用,则您确切地知道预期的类型。涵盖所有类型的代码,应检查等IsNothingparameter.valueValueDbNull.valueDbNull.ValueDbNull.Value.ToString() = String.EmptyToString()if dbnull, if is nothing, if oracleDate, if oraclestring
0赞 T.S. 3/30/2020
@WSC但不要使用 .这是 VB 兼容性函数。使用 或 .当您最终最终转换为 c 时,将为您提供帮助#IsNothingis nothingisnot nothing