繁体   English   中英

这是Oracle ODP.NET中的错误吗?

[英]Is this a bug in the Oracle ODP.NET

我很好奇这是否是Oracle ODP.NET提供程序中的错误。 我创建了一个参数化的插入语句。 我将参数之一命名为“:EMPNO”,并在测试时将其值设为“ 8000”。 在数据库中,EMPNO列定义为varchar2(4字节)。 但是,该插入给出了一条错误消息

ORA-12899:值对于列“ HR”。“ HR_DEPARTURE”。“ EMPNO”太大(实际:6,最大值:4)

这是一些代码片段:

"INSERT INTO HR.HR_DEPARTURE (EMPNO) ':EMPNO'"

然后我添加一个参数

new OracleParameter(":EMPNO", OracleDbType.Varchar2) {Value = empNo ?? Convert.DBNull}

创建一个命令并添加参数(因此有多个参数,因此是数组)

DbCommand cmd = Connection.CreateCommand();
cmd.Parameters.AddRange(sqlParams.ToArray());

我进行了一些研究,并考虑了编码等问题,以及Oracle默认使用位置绑定(而不是BindByName)这一事实。 但是,这些方法都无法解决问题。 然后,我在黑暗中拍照,并将参数名称更改为“:EMPN”,并收到以下错误消息:

ORA-12899:列“ HR”。“ HR_DEPARTURE”。“ EMPNO”的值太大(实际:5,最大值:4)

这促使我在查询工作时将参数名称更改为“:EMP”。 我发现提供者在c#中的参数名称上强制数据库列大小非常奇怪。 数据库大小应该是值的强制性(“ 8000”,我在所有测试中均保持相同)。

没有; 问题是您的查询没有意义。

':EMPNO'是字面值:EMPNO的字符串,其长度为五个字符。

要引用参数,请不要编写字符串文字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM