Проверка, является ли OracleParameter.Value нулевым, без преобразования ToString - PullRequest
1 голос
/ 27 марта 2020

У меня есть хранимая процедура, которая имеет некоторые параметры 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 ... Но почему нулевое значение преобразуется в строку "null"? Это кажется несовместимым со всем остальным, что обычно конвертируется в "".

Кроме того, главный вопрос в том, почему ни IsDBNull, ни IsNothing не возвращают истину?

1 Ответ

1 голос
/ 29 марта 2020

При использовании ODP ваш параметр автоматически не возвращает тип CLR, а скорее oracle тип. Таким образом, способ сделать это для цифры c 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
...