在此,错误出现在 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 值是不会来的。注意:在查询中插入数据,将正确插入但使用存储过程不起作用。
2 回答
LEATH
TA贡献1936条经验 获得超6个赞
ADO.NET 有一个“特性”,经常让人们绊倒;不发送带null
值的参数;您需要检查并指定该值。一种方法是使用空合并:null
DBNull.Value
someParam.Value = (object)intendedValue ?? DBNull.Value;
请注意,大多数 ORM 工具(EF 等)和 ADO.NET 辅助实用程序(Dapper 等)将为您执行此操作。
三国纷争
TA贡献1804条经验 获得超7个赞
if (DBNull.Value.Equals(objComplainDetails.YARD_NAME) | objComplainDetails.YARD_NAME == string.Empty) arrParam[0].Value = null; else arrParam[0].Value = objComplainDetails.YARD_NAME;
像这样,所有数据都应该是 DAL 中的代码。
- 2 回答
- 0 关注
- 171 浏览
添加回答
举报
0/150
提交
取消