gpt4 book ai didi

c# - 如何检查输出 DbParameter 的空值?

转载 作者:行者123 更新时间:2023-12-04 13:58:37 24 4
gpt4 key购买 nike

我正在使用 System.Data.Common.DbCommand.ExecuteNonQueryAsync调用具有一个输出参数的 Oracle 存储过程 o_err_msg这(您猜对了)是发生异常时的 VARCHAR2 错误消息,或过程成功时为 null。因此,在调用 `ExecuteNonQueryAsync 后,我试图检查该参数是否为空,以查看是否有错误。但找不到真正做到这一点的方法。

我尝试比较(通过 == 运算符和 Equals 方法)Value参数的属性为null,为DBNull.Value并调用 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可以访问,如果我不必将其强制转换为 OracleParameter,我更愿意或任何特定于 Oracle 的东西。

有什么办法可以做到这一点吗?

提前致谢。

最佳答案

我今天遇到了同样的问题,fowling 代码应该是一种解决方法。

OracleParameter out1 = new OracleParameter("out1", OracleDbType.Varchar2, ParameterDirection.Output);
out1.Size = 1000;
Oracle.ManagedDataAccess.Types.OracleString out1Value = (Oracle.ManagedDataAccess.Types.OracleString)out1.Value;
if (!out1Value.IsNull)
{
// do something
}

关于c# - 如何检查输出 DbParameter 的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com