2009-07-22 6 views
4

次のC#コードを使用して、OracleCommandのパラメータ値としてnullを指定する方法を決定しようとしています。関連するビットを抜粋しましたが、基本的には、sal_idに値0が指定されている場合は、nullとして格納する必要があります。私はヌル、 "ヌル"といくつかの他のものを試しましたが、これまでのところ運がありません。OracleCommandパラメータのNULL値の処理

cmd.CommandText = "INSERT INTO tcustomer(cust_id, salutation_id) VALUES(ORADBA.SEQCUST.NEXTVAL, :salid) RETURNING cust_id INTO :newcid" ; 

if (sal_id==0) { 
    cmd.Parameters.Add("salid", Null) ; 
} else { 
    cmd.Parameters.Add("salid", sal_id) ; 
} 

cmd.Parameters.Add("newcid", OracleDbType.Int32).Direction = ParameterDirection.ReturnValue ; 

cmd.ExecuteNonQuery() ; 

String newcidval = cmd.Parameters["newcid"].Value.ToString() ; 
cmd.Dispose() ; 

答えて

17

nullSystem.DBNull INSEADをお試しください。

DBNullクラスは、 存在しない値を表します。データベースでは、 の例の場合、表 の行の列にはデータはまったく含まれていない可能性があります。 つまり、列は の値を持たず、 がまったく存在しないとみなされます。

cmd.Parameters.Add("salid", "Null") ; 

、それは素晴らしい仕事:私はDBNull.Valueは動作しませんでしたので、私はこのようにそれをやっに対してDBNullオブジェクト は存在しない列

+5

おかげで...それは実際にSystem.DBNull.Valueで動作するようになりました。 –

+1

Andrew Hareの答えはDan Uのような偽りです。それはSystem.DBNull.Valueです –

5

DBNullを他のデータ型に割り当てることはできません。暗黙的にオブジェクトに変換する必要があります。

cmd.Parameters.Add(new OracleParameter(":number_column", OracleType.Number)).Value = (s.Class.HasValue) ? s.Class.Value : (object)DBNull.Value; 

ここで、s.Classはintですか?いくつかのため

var p = cmd.Parameters.Add("salid", OracleDbType.Int32); 
if (sal_id != 0) { 
    p.Value = sal_id; 
} 
0

nullです私はINullableを実装したOracle Typeにキャストする必要がありました。

(Oracle.ManagedDataAccess.Types.OracleDecimal)command.Parameters["pKey"].Value)).IsNull 
1

DBNull.Value作品:パラメータ値をケースに(object)DBNull.Valueとして設定されている、それはあなたが空のパラメータを(起動するnullになります)を追加し、のみsal_id != 0場合は、値を設定することができ

0

あなたのOracleParameterオブジェクトのステータスを確認することができます - それはOracleParameterStatus.NullFetchedに等しい場合、何も取り出されませんでした、それ以外のparamの値の属性を使用します。私はあなたのNullableデータ型を使用している場合は、このアプローチをお勧めします。

例:

var _myParam = new OracleParameter("p_param", OracleDbType.Object, ParameterDirection.Output) { UdtTypeName = "my_schema.MY_TYPE" }; 

... (add command parameter) 
... (execute command) 

var _myResponse = _myParam.Status == OracleParameterStatus.NullFetched ? null : MapMyTypeFromOracleType((MyType)_myParam.Value); 
関連する問題