我有一个存储过程,它有一些OUT
参数。在上。NET方面我很困惑如何在将参数转换为之前检查它是否为null。NETDouble?
。我以前在几个不同的项目中做过很多这样的事情,以前从未遇到过这个问题。。。
这是我尝试过的每一种组合:
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。。。但是,为什么空值会转换为字符串"null"
呢?这似乎与通常转换为""
的所有其他内容都不一致。
除此之外,主要的问题是为什么IsDBNull
和IsNothing
都不返回true?
使用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