これはORacle11gとは何かを持っています。 あなたが言ったように、実際のヌル値の代わりに、ヌル文字列です。 そんなに以下INullableから両方の継承は、私の解決策だったのOracleDbType、OracleDbTypeのとCLRデータ型にNULLからチェックしている場合:
((INullable)rowParamDBType.Value)が持っているために
を.IsNullよりクリーンなソリューションであれば、これをエクステンションに配置できます。
行がDbTypeの場合、param.Value == DbNull.Valueを確認できます。
以上があまりにも動作しますが、この問題の真の解決策は、あなたのOracleParameter宣言で代わりのOracleDbTypeのOracleDbTypeExを使用しています。 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
}
ハウズコードが失敗していますか? (失敗し、期待されていない作業が少し異なるケース...) –
私が意味するのは、行[PARENTID]の値は.ToString = "null"ではなく "null"です。だから、整数として解析しようとします。私は例外を得る。 "入力文字列が正しい形式ではありません" –
'行[PARENTID]'の種類は何ですか?それが 'string'または' object'で、値*が本当にnull *の場合、それはNullReferenceException(*誰かが拡張メソッドでsnuckしていない限り)をスローします。おそらく、格納されるデータは*文字列「null」ですか? (またはアダプタに壊れているものやフラグがあります) –