我正在使用System.Data.Common.DbCommand.ExecuteNonQueryAsync
来调用一个具有一个输出参数o_err_msg
的Oracle存储过程,该输出参数(您猜到了)是发生异常时的VARCHAR2错误消息,或者当过程成功时为null。因此,在调用ExecuteNonQueryAsync之后,我试图检查该参数是否为null,以查看是否存在错误。但是找不到实际的方法。
我尝试(通过==
运算符和Equals
方法)比较参数的Value
属性为null,与DBNull.Value
并调用{{ 1}}。所有这些都返回null。我什至尝试将其转换为字符串(通过System.Convert.IsDBNull
方法或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
或任何特定于Oracle的内容。
有什么办法可以做到这一点?
谢谢。