数据未插入表中,如果我们选择多个材料和数量,此 DAL 函数将多次调用

在此,错误出现在 catch 'ORA-01084: invalid argument in OCI call' isearch 中,为什么这个错误在代码中正常出现,它显示以下解决方案:

问题在于 Oracle .Net 驱动程序的深处。我们将 Qty 字段定义为 INT。由于内部架构,数量可能为负数或空值。95% 的案例 Qty 是正整数(应该是),但有时由于调整和其他因素,它可能为空或负数。

所以最后我追踪到你如何将记录放入数据库的顺序:

Qty 1 Qty 0 Qty null Qty -1

工作正常。但在这种情况下:

Qty null Qty 1 Qty -1

将在“-1”值上使用 OCI 无效参数。

我在 Oracle 上创建了一张票,并将其发送给我们的产品团队进行修复。从那以后我继续前进,所以不太确定它是否以及何时修复。

但是在这个 0 或 NULL 值是不会来的。

注意:在查询中插入数据,将正确插入但使用存储过程不起作用。


慕姐4208626
浏览 172回答 2
2回答

LEATH

ADO.NET 有一个“特性”,经常让人们绊倒;不发送带null值的参数;您需要检查并指定该值。一种方法是使用空合并:nullDBNull.ValuesomeParam.Value = (object)intendedValue ?? DBNull.Value;请注意,大多数 ORM 工具(EF 等)和 ADO.NET 辅助实用程序(Dapper 等)将为您执行此操作。

三国纷争

if (DBNull.Value.Equals(objComplainDetails.YARD_NAME) | objComplainDetails.YARD_NAME == string.Empty) arrParam[0].Value = null; else arrParam[0].Value = objComplainDetails.YARD_NAME;像这样,所有数据都应该是 DAL 中的代码。
打开App,查看更多内容
随时随地看视频慕课网APP