Это что-то делать с ORacle11g. Как и вы сказали, вместо реального значения null это пустая строка. Если вы проверяете из OracleDbType, нуль в OracleDbType и CLR DATATYPE оба наследуется от 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
}
Hows делает код не получится? (Неудачные и неработающие ожидаемые немного разные случаи ...) –
Я имею в виду значение строки [PARENTID] .ToString = "null" вместо null. Поэтому, когда он пытается проанализировать его как целое. Я получаю исключение. «Строка ввода не в правильном формате» –
Каков тип 'row [PARENTID]'? Если это 'string' или' object', и если значение * действительно равно null, то это вызовет исключение NullReferenceException (* если только * кто-то не проскользнул в методе расширения!). Возможно, данные, хранящиеся *, являются * строкой «null»? (Или есть что-то сломанное или флаг в адаптере ...) –