c# - 这是 Oracle ODP.NET 中的错误吗

标签 c# oracle odp.net-managed

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

ORA-12899: value too large for column "HR"."HR_DEPARTURE"."EMPNO" (actual: 6, maximum: 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 默认按位置绑定(bind)(而不是 BindByName)的事实。但是,这些都没有解决问题。然后我在黑暗中拍摄并将参数名称更改为“:EMPN”并收到以下错误消息:

ORA-12899: value too large for column "HR"."HR_DEPARTURE"."EMPNO" (actual: 5, maximum: 4)

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

最佳答案

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

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

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

关于c# - 这是 Oracle ODP.NET 中的错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224952/

相关文章:

sql - 从 Oracle 数据库中的 XML 属性查询时如何使用 XPath 表达式

perfmon中缺少ODP.NET托管驱动程序性能计数器

stored-procedures - ODP.net托管驱动程序引发ORA-12570:网络 session :意外的数据包读取错误

c# - 是否有必要在配置文件中转义反斜杠

c# - 当前上下文中不存在名称 'DataList1'

c# - 以编程方式检查 NuGet 包中经过身份验证的文件

oracle - ODP.NET 托管连接池每 3 分钟关闭/打开一次

c# - 通过 dll 将 C# 类映射到 Lua 函数

java - JDBC 与 Oracle -executeUpdate 自动更改 AutoCommit 的状态

Oracle建表问题