6

我正在尝试使用以下 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() ;
4

6 回答 6

19

尝试. System.DBNull_null

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

于 2009-07-22T15:21:44.213 回答
7

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

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

s.Class 在哪里是 int?并且参数值设置为(object)DBNull.Value以防万一

于 2014-04-01T06:11:29.320 回答
2

DBNull.Value适用于某些人,但我需要将其转换为实现的 Oracle 类型INullable。如果您使用的是 Nullable 数据类型,我推荐这种方法:

    (Oracle.ManagedDataAccess.Types.OracleDecimal)command.Parameters["pKey"].Value)).IsNull
于 2016-12-02T12:54:11.227 回答
1

您可以检查您的 OracleParameter 对象的状态 - 如果它等于 OracleParameterStatus.NullFetched,则没有获取任何内容,否则使用参数的 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 );
于 2017-06-21T11:48:59.217 回答
0

您可以添加一个空参数(开始时为 null),并且仅在以下情况下设置值sal_id != 0

var p = cmd.Parameters.Add("salid", OracleDbType.Int32);
if (sal_id != 0) {
    p.Value = sal_id;
}
于 2015-03-12T15:18:15.973 回答
-2

对我来说DBNull.Value没有用,所以我这样做了:

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

效果很好。

于 2014-02-12T09:55:45.097 回答