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

时间:2015-05-13 20:50:45

标签: c# oracle odp.net-managed

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

  

ORA-12899:值太大而不适合列" HR"。" HR_DEPARTURE"。" EMPNO" (实际:6,最大:4)

以下是一些代码snipets:

"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'我在所有测试中都保持相同)。

1 个答案:

答案 0 :(得分:5)

没有;问题是你的查询毫无意义。

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

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