Question

Je suis en train de déterminer comment spécifier null comme une valeur de paramètre dans un OracleCommand utilisant le code C # suivant. J'ai extrait les bits pertinents, mais essentiellement le point est si sal_id vient avec la valeur 0, il doit être stocké comme nul. J'ai essayé Null, « nul », et un couple d'autres choses, mais jusqu'à présent pas de chance.

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() ;
Était-ce utile?

La solution

System.DBNull INSEAD de null.

  

La classe DBNull représente un   valeur inexistante. Dans une base de données, pour   par exemple, une colonne d'une ligne d'une table   pourrait ne pas contenir de données que ce soit.   Autrement dit, la colonne est considéré comme   ne pas exister du tout au lieu de simplement pas   ayant une valeur. Un objet DBNull   représente la colonne inexistante

Autres conseils

DBNull ne peut être attribué à tout autre type de données doivent donc convertir implicitement à l'objet.

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

où s.Class est int? et la valeur du paramètre est définie comme (object)DBNull.Value dans le cas où il est nul

DBNull.Value fonctionne pour certains, mais je devais le jeter à un type Oracle mis en œuvre INullable. Je recommande cette approche si vous utilisez un type de données Nullable:

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

vous pouvez vérifier l'état de votre objet OracleParameter -. Si elle est égale à OracleParameterStatus.NullFetched, rien a été tiré par les cheveux, sinon utiliser l'attribut Valeur de param

Exemple:

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 );

Vous pouvez ajouter un paramètre vide (il sera nul pour commencer), et seulement définir la valeur si sal_id != 0:

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

Pour moi DBNull.Value n'a pas fonctionné, alors je l'ai fait comme ceci:

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

et il fonctionnait très bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top