Это как-то связано с ORacle11g.Как и то, что вы сказали, вместо реального нулевого значения, это пустая строка.Если вы проверяете из OracleDbType, нулевое значение в OracleDbType и типе данных CLR оба наследуют от INullable, поэтому ниже было мое решение:
((INullable) rowParamDBType.Value) .IsNull
Чтобы иметь более чистое решение, вы можете поместить его в расширение.
Если ваша строка имеет тип DbType, вы можете проверить на param.Value == DbNull.Value.
Хотя вышеприведенное также будет работать, реальное решение этой проблемы - использовать OracleDbTypeEx вместо OracleDbType в объявлении OracleParameter.OracleDbTypeEx вернет значение в DBType и из-за этого распознает DBNull.Смотрите пример кода ниже.
command.Parameters.Add(new OracleParameter
{
ParameterName = "param_out",
OracleDbTypeEx = OracleDbType.Decimal,
Direction = ParameterDirection.Output
});
if (command.Parameters["param_out"].Value != Convert.DBNull)
{
//your code here
}