在不进行 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"
?这似乎与通常转换为 ""
的所有其他内容不一致。
除此之外,主要问题是为什么 IsDBNull
和 IsNothing
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
我有一个包含一些 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"
?这似乎与通常转换为 ""
的所有其他内容不一致。
除此之外,主要问题是为什么 IsDBNull
和 IsNothing
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