处理OracleCommand参数中的空值

Dan*_* U. 5 c# odp.net

我正在尝试使用以下C#代码确定如何在OracleCommand中将null指定为参数值.我已经摘录了相关的位,但基本上关键是如果sal_id带有值0,它应该存储为null.我试过Null,"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() ;
Run Code Online (Sandbox Code Playgroud)

And*_*are 18

尝试System.DBNull一下null.

DBNull类表示不存在的值.例如,在数据库中,表行中的列可能不包含任何数据.也就是说,该列被认为根本不存在而不仅仅是没有值.DBNull对象表示不存在的列

  • 谢谢......实际上让它与System.DBNull.Value一起工作. (5认同)
  • Andrew Hare 的回答就像 Dan U. 发布的那样是虚假的。它是 System.DBNull.Value (2认同)

Kam*_*dir 6

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

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

s.Class是int的地方?和参数值设置为(object)DBNull.Valuenull