代码之家  ›  专栏  ›  技术社区  ›  Dan U.

在OracleCommand参数中处理空值

  •  4
  • Dan U.  · 技术社区  · 17 年前

    我正在尝试使用下面的C代码确定如何在OracleCommand中将空值指定为参数值。我已经摘录了相关的位,但基本上重点是如果sal_id的值为0,它应该存储为空。我试过“空”和其他一些东西,但到目前为止还没有运气。

    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() ;
    
    6 回复  |  直到 9 年前
        1
  •  17
  •   Andrew Hare    17 年前

    尝试 System.DBNull 欧洲工商管理学院 null .

    dbnull类表示 不存在的值。在数据库中,用于 例如,表格行中的一列 可能不包含任何数据。 也就是说,该列被认为是 根本不存在,而不仅仅是不存在 有价值的。一个dBULL对象 表示不存在的列

        2
  •  6
  •   Kamran Qadir    12 年前

    DBNull不能分配给任何其他数据类型,因此必须将其隐式转换为对象。

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

    int在哪里?参数值设置为 (object)DBNull.Value 如果为空

        3
  •  1
  •   Thor    9 年前

    DBNull.Value 对某些人有效,但我需要将其强制转换为实现 INullable . 如果您使用的是可以为空的数据类型,我建议使用这种方法:

        (Oracle.ManagedDataAccess.Types.OracleDecimal)command.Parameters["pKey"].Value)).IsNull
    
        4
  •  0
  •   ParPar    12 年前

    为了我 DBNull.Value 不起作用,所以我这样做:

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

    而且效果很好。

        5
  •  0
  •   bonh R.C    11 年前

    您可以添加一个空参数(开始时为空),并且仅在 sal_id != 0 :

    var p = cmd.Parameters.Add("salid", OracleDbType.Int32);
    if (sal_id != 0) {
        p.Value = sal_id;
    }
    
        6
  •  0
  •   drumsk    9 年前

    您可以检查oracleParameter对象的状态-如果它等于oracleParameterStatus.NullFetched,则不提取任何内容,否则使用param的value属性。

    例子:

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