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

Checking if OracleParameter.Value is Null without doing ToString conversion

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

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

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"

计算结果为 True,因此我可以识别空值...但为什么空值会转换为字符串 "null"?这似乎与通常转换为 "" 的所有其他内容不一致。

除此之外,主要问题是为什么 IsDBNullIsNothing return 都不对?

使用 ODP 时,您的参数不会自动 return 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