注册

.Net DmProvider 调用存储过程时,若输出参数为空字符串,会抛出异常 6081

DM_547550 2023/02/17 1074 5

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8_20230106
【操作系统】:Windows Server 2022
【CPU】:I3-10100
【问题描述】*:如题所述
示例存储过程:
Create Or Replace Procedure SP_TEST1(RET Out Varchar2(50)) As Begin RET := Null; End;
Create Or Replace Procedure SP_TEST2(RET Out Varchar2(50)) As Begin RET := ‘’; End;

示例代码:
using var connection = Dm.DmClientFactory.Instance.CreateConnection();
connection.ConnectionString = “Server=XXX;Port=5236;User Id=XXX;Password=XXX”;
connection.Open();

using var command1 = connection.CreateCommand();
command1.CommandText = “SP_TEST1”;
command1.CommandType = CommandType.StoredProcedure;
var ret1 = command1.CreateParameter();
ret1.ParameterName = “:RET”;
ret1.Direction = ParameterDirection.Output;
command1.Parameters.Add(ret1);
command1.ExecuteNonQuery(); //正常执行

using var command2 = connection.CreateCommand();
command2.CommandText = “SP_TEST2”;
command2.CommandType = CommandType.StoredProcedure;
var ret2 = command2.CreateParameter();
ret2.ParameterName = “:RET”;
ret2.Direction = ParameterDirection.Output;
command2.Parameters.Add(ret2);
command2.ExecuteNonQuery(); //Dm.DmException (0x80004005): 数据为空。不能对空值调用此方法或属性。

异常堆栈:
在 Dm.DmError.ThrowDmException(Int32 code)
在 Dm.DmGetValue.GetString(Int32 i, Byte[] val, Int32 CType, Int32 prec, Int32 scale)
在 Dm.DmResp.GetParamData(DmMsg msg, DmStatement stmt)
在 Dm.DmResp.Execute(DmMsg msg, DmStatement stmt, DmConnProperty connProperty)
在 Dm.DmCsi.ExecutePrepared(DmStatement stmt, DmInfo des)
在 Dm.DmStatement.ExecutePreparedUpdate()
在 Dm.DmCommand.ExecutePreparedUpdate()
在 Dm.DmCommand.do_ExecuteNonQuery()
在 Dm.DmCommand.ExecuteNonQuery()

猜测原因:
屏幕截图 20230217 181350.png

回答 0
暂无回答
扫一扫
联系客服