我正在使用
我尝试将参数的
我运行的代码与以下代码类似:
尽管在此示例中,我将参数初始化为
是否有任何方法可以做到这一点?
提前感谢。
System.Data.Common.DbCommand.ExecuteNonQueryAsync
调用一个Oracle存储过程,该过程有一个输出参数o_err_msg
,当出现异常时是一个VARCHAR2错误消息(您猜对了),当过程成功时为null。因此,在调用 `ExecuteNonQueryAsync` 之后,我试图检查该参数是否为null,以查看是否发生了错误。但是找不到实际执行它的方法。我尝试将参数的
Value
属性与null、DBNull.Value
以及在其上调用System.Convert.IsDBNull
进行比较(通过==
运算符和Equals
方法)。所有这些都返回null。我甚至试图将其转换为字符串(通过ToString
方法或System.Convert.ToString
),然后调用string.IsNullOrEmpty
,但是结果字符串是"null"
。我运行的代码与以下代码类似:
DbCommand cmd = dbConnection.CreateCommand();
cmd.CommandText = "PCKG_FOO.PROC_BAR";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("o_err_msg", OracleDbType.Varchar2, 4000, "", ParameterDirection.Output));
await cmd.ExecuteNonQueryAsync();
if (cmd.Parameters["o_err_msg"].Value != null)
throw new InvalidOperationException(cmd.Parameters["o_err_msg"].Value.ToString());
尽管在此示例中,我将参数初始化为
OracleParameter
,但在我的代码中,我只能访问 DbParameter
,并且我希望不必将其强制转换为 OracleParameter
或任何特定于 Oracle 的内容。是否有任何方法可以做到这一点?
提前感谢。
if (cmd.Parameters["o_err_msg"].Value is DBNull)
这段代码是否有效?ADO.NET 使用占位符来表示数据库中的null
,即DBNull.Value
。 - Marc GravellDBNull.Value
来引用 DBNull 的确切值 @LuisCosta - Black Hole!DBNull.Value.Equals(cmd.Parameters["o_err_msg"].Value)
。 - Joel Coehoorn